2011-11-14 49 views
1

我試圖在另一個項目中的rake文件中執行項目的黃瓜測試。從rake文件執行另一個應用程序的測試

目前我想這一點:

system "cd /path/to/project;rvm use --create [email protected]; cucumber features/test.feature" 

該方法適用於CD和RVM似乎如果我運行的紅寶石......但問題是,黃瓜寶石似乎RVM使用後,開始工作從當前文件夾調用(不是應用程序到測試文件夾)。

我得到的錯誤是:

cucumber is not part of the bundle. Add it to Gemfile. (Gem::LoadError) 

這好像是用黃瓜,而不是@Test寶石的地方寶石版本。

對此有何看法?

還是有更好的方法來運行黃瓜測試另一個項目,依賴rvm &不同的捆綁?

回答

4

我也一直試圖做同樣的事情;從另一個「控制」應用程序中運行應用程序的測試(或任何rake任務)。

原因:(只是讓我沒有得到送達「?爲什麼地球上」)

我想建立一個應用程序(而不是像cruisecontrol.rb),它可以監控,調度和查看一組應用程序的規格。

在cruisecontrol的源代碼中,我發現Bundler提供了一個解決方案;的https://github.com/thoughtworks/cruisecontrol.rb/blob/master/lib/platform.rb

Bundler.with_clean_env do 
    system "rake spec" 
end 

見line56,步驟出了捆綁和命令,沒有控制應用程序的運行的寶石。

但是最有可能的是,該命令使用bundle exec然後停止工作。

Bundler.with_clean_env { system "bundle exec rake spec" } 

而你回到了完全相同的問題。這是由一些仍然存在並由子shell繼承的bundler變量引起的。完整(非常好)解釋here

解決方法是像這樣更改bundler上的with_clean_env方法;

BUNDLER_VARS = %w(BUNDLE_GEMFILE RUBYOPT BUNDLE_BIN_PATH) 
module Bundler 
    def self.with_clean_env &blk 
    bundled_env = ENV.to_hash 
    BUNDLER_VARS.each{ |var| ENV.delete(var) } 
    yield 
    ensure 
    ENV.replace(bundled_env.to_hash)  
    end 
end 

上面的代碼從here

我把我的控制應用程序的environment.rb文件(這也許應該是在初始化?),現在我可以從內部運行其他應用程序的規格控制應用。

#in control app 
result = nil 
Dir.chdir(test_app_path) #move into test app 
Bundler.with_clean_env { result = `bundle exec rake spec` } #run test apps specs 
puts result #display result inside control app 
相關問題