2011-11-14 53 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 
相关问题