簡體   English   中英

從rake文件執行另一個應用程序的測試

[英]Execute tests for another app from a rake file

我正在嘗試為另一個項目中的rake文件中的項目執行黃瓜測試。

目前我正在嘗試這個:

system "cd /path/to/project;rvm use --create 1.9.2-p290@test; cucumber features/test.feature"

這適用於cd,如果我在rvm使用后運行哪個ruby,rvm似乎有效......但問題是黃瓜寶石好像是從當前文件夾調用的(不是app到test文件夾)。

我得到的錯誤是:

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

它似乎使用黃瓜的本地gemset版本而不是@test gemset。

有什么想法嗎?

或者,是否有更好的方法為另一個依賴rvm和不同捆綁的項目運行黃瓜測試?

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

原因:(就這樣,我沒有得到“為什么在地球上?”)

我正在嘗試構建一個應用程序(比如cruisecontrol.rb),它可以監視,安排和查看一組應用程序的規范。

在巡航控制源的一些挖掘后,我發現Bundler提供了一個解決方案;

Bundler.with_clean_env do 
  system "rake spec"
end

參見https://github.com/thoughtworks/cruisecontrol.rb/blob/master/lib/platform.rb的第 56行

跳出捆綁包,命令在沒有控制應用程序的寶石的情況下運行。

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

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

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

解決方案是在with_clean_env上更改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

以上代碼來自這里

我把它放在我的控制應用程序的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

改變; 在您的腳本中, &&似乎有效。

暫無
暫無

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

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