簡體   English   中英

使用單個命令為多個Ruby版本運行RSpec

[英]Run RSpec for more than one Ruby version using single command

我一直在尋找一種對所有紅寶石版本運行“ rake spec”的方法。

到目前為止,我已經在Rakefile中編寫了此代碼,但是它不起作用:

RUBIES = ['ruby-2.0.0', 'ruby-2.1.1', 'ruby-2.2.1']

RUBIES.each do |ruby_v|
  sh "rvm use #{ruby_v}"
  RSpec::Core::RakeTask.new(:spec)
end

有什么想法我該怎么做?

如果我可以傳遞參數以指定是針對單個Ruby版本還是針對所有Ruby版本運行測試,那就太好了。

編輯:

這是我使用的Rakefile和我得到的錯誤。 它與我在頂部提到的文件不同。 它使用rvm use #{ruby_v}; rspec spec Keith在回答中建議的rvm use #{ruby_v}; rspec spec

rvm是一個shell命令,其Ruby設置僅適用於該shell的當前實例。 因此,當您運行sh "rvm use #{ruby_v}"您將更改已調用外殼的rvm版本,然后從該外殼退出。

另外,您的Ruby程序是一個運行Ruby虛擬機的操作系統進程,因此,當您調用RSpec::Core::RakeTask.new(:spec) ,您仍處於同一OS進程和Ruby版本中通過它啟動腳本。

您需要在調用的Shell中運行rspec測試並更改Ruby版本。 我認為這樣會起作用:

`rvm use #{ruby_v}; rspec spec`

...但是正如您所指出的,事實並非如此。 您需要將新的外殼程序作為“登錄外殼程序”運行,以便正確設置rvm。 此外,必須告知新的Shell,您正在調用的東西是Shell命令,而不是腳本或二進制可執行文件。 換一種說法:

1)讓您的命令顯式調用bashzsh (在Mac上sh對我不起作用)。

2)指定(可能是-l )它是一個登錄shell。

3)指定(可能使用-c )您正在執行shell命令( rvm ),而不是腳本或可執行文件。

我使用zsh作為我的外殼,但是您應該能夠在下面的代碼中替換bash並且它應該可以工作(當然,也可以將rspec命令放在其中):

2.3.0 :024 > puts `zsh -lc "rvm current"`
ruby-2.3.0
 => nil
2.3.0 :025 > puts `zsh -lc "rvm use jruby; rvm current"`
Using /Users/kbennett/.rvm/gems/jruby-9.0.5.0
jruby-9.0.5.0
 => nil
2.3.0 :026 > puts `zsh -lc "rvm current"`
ruby-2.3.0
 => nil

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM