我可以覆盖 test_helper.rb 中的任务:环境来测试 rake 任务吗?
题
我在 Rakefile 中有一系列 rake 任务,我想将其作为我的规范等的一部分进行测试。每个任务的定义形式如下:
task :do_somthing => :environment do
# Do something with the database here
end
其中 :environment 任务设置 ActiveRecord/DataMapper 数据库连接和类。我没有将其用作 Rails 的一部分,但我有一系列测试,我喜欢将其作为 BDD 的一部分运行。
此片段说明了我如何尝试测试 rake 任务。
def setup
@rake = Rake::Application.new
Rake.application = @rake
load File.dirname(__FILE__) + '/../../tasks/do_something.rake'
end
should "import data" do
@rake["do_something"].invoke
assert something_in_the_database
end
所以我请求帮助 - 是否可以覆盖 test_helper.rb 文件中的 :environment 任务,以便我的 rake 测试与我的测试数据库而不是生产数据库交互?我尝试在帮助程序文件中重新定义任务,但这不起作用。
任何解决方案的帮助都会很棒,因为过去一周我一直坚持这个问题。
解决方案
我对类似问题的“解决方案”是从 .rake 文件中提取所有逻辑并创建类来执行任务,只在 rake 文件中留下一行调用,我相信不会太难测试。然后可以非常正常地测试这些类。
我不知道这能在多大程度上承受一组复杂的相互依赖的任务,这些任务维持一些影响深远的状态:可能不太好,但话又说回来,这很可能表明存在其他一些设计问题......
我很好奇我是否错过了更好的东西。
编辑:曾经有一篇博文 这里 (a) 说的是同样的事情,(b) 说得更好。看来也是他先说的。
其他提示
我认为你正在寻找这条线: 需要(File.join(RAILS_ROOT, '配置', '环境')) 这正是你在查找内容“任务:环境”实施
我用它使用RSpec的测试我的rake任务
当您正在运行的测试环境是被加载是测试
,所以你用试验相互作用 唯一的数据库。
所以我不认为有任何理由来覆盖你的耙任务test_helper.rb中
不隶属于 StackOverflow