2010-12-03 35 views
0

我有一个Rails 3 gem,它有一些只能在测试环境中运行的rake任务。在其他环境中运行并不合理。在测试环境中自动运行gem任务

我的问题是Rake加载Rails系统,以便在我的宝石中找到我的任务。所以当它到达我的任务时,Rails已经加载到“开发”环境中(或用户指定的任何环境)。这意味着,为了运行我的Rake任务正确的用户必须做到:

RAILS_ENV=test rake mytask 

由于我的任务只是使“测试”环境某种意义上说,这是恼人的,因为我宁愿用户能够只需键入:

rake mytask 

这类似于如何测试:单元和测试:泛函自动假设测试环境和用户不需要在命令行来指定RAILS_ENV =测试。所以问题是如何修改我的测试,以便Rails切换到测试环境?

我目前的解决方法是:

Rails.env = 'test' 
ActionMailer::Base.delivery_method = :test 
require Rails.root.join('test/test_helper') 

这似乎在一定程度上工作,但它仍在记录日志/ development.log,我认为这仍然是实际运行的“发展”的配置。任何人有任何想法?看看如何在Rails中定义测试任务本身并不能揭示如何做到这一点,我可以看到。

https://github.com/rails/rails/blob/master/railties/lib/rails/test_unit/testing.rake

回答

3

更新:我在https://github.com/eric1234/test_inline/commit/fe3da7efa3a2cdb7824c23cfa41697b0ceb9e8e2采取输入从Eric的实施后,更新了我的代码。 对于原代码看看 - https://stackoverflow.com/posts/4600524/revisions

desc "Do something in Test environment" 
task :example => :environment do 
    if not Rails.env.test? 
    Dir.chdir(Rails.root) do 
     system "rake example RAILS_ENV=test" 
    end 
    else 
    #.... stuff .... 
    end 
end 

我没有检查代码的正确性,但是你的想法,对吧?

+0

天才!简单并解决了我需要分叉的另一个问题,以避免一个任务与另一个任务相混淆。希望我有一些观点,所以我可以给你一个很好的答案。我确实给你在提交信贷: https://github.com/eric1234/test_inline/commit/fe3da7efa3a2cdb7824c23cfa41697b0ceb9e8e2 – 2011-01-29 17:23:48

相关问题