我有一个Rails 3 gem,它有一些rake任务,只能在测试环境中运行。在其他环境中运行并没有多大意义。
我的问题是Rake加载Rails系统以便在我的gem中找到我的任务。因此,当它到达我的任务时,Rails已经加载到“开发”环境(或用户指定的任何环境)中。这意味着为了正确运行我的rake任务,用户必须这样做:
RAILS_ENV=test rake mytask
由于我的任务只在“测试”环境中有意义,这很烦人,因为我宁愿用户只能输入:
rake mytask
这类似于test:units和test:functionals自动承担测试环境,用户不需要在命令行指定RAILS_ENV = test。所以问题是如何修改我的测试以便Rails切换到测试环境?
我目前的解决方法是:
Rails.env = 'test'
ActionMailer::Base.delivery_method = :test
require Rails.root.join('test/test_helper')
这似乎有些工作,但它仍然记录到log / development.log,我认为它仍然在运行“开发”配置。有人有什么想法吗?看看如何在Rails中定义测试任务本身并没有揭示我能看到的如何做到这一点。
https://github.com/rails/rails/blob/master/railties/lib/rails/test_unit/testing.rake
答案 0 :(得分: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
我没有检查代码的正确性,但是你明白了,对吧?