在测试环境中自动运行gem任务

时间:2010-12-03 21:11:50

标签: testing ruby-on-rails-3 rake gem environment

我有一个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

1 个答案:

答案 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

我没有检查代码的正确性,但是你明白了,对吧?