[英]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)讓您的命令顯式調用bash
或zsh
(在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.