我有一个rake任务db:test:prepare用于在运行测试之前清除测试数据库。它似乎神奇地依赖于测试,测试:单元和测试:功能任务,它们被定义为某个核心库的一部分。
当我运行其中一个test:单元,或者单独测试:function:db:test:prepare先运行,测试成功。但是如果我运行默认测试任务,则第二套测试失败,因为数据库之间没有重置。
研究一下,我发现rake依赖项如果已经运行一次就会被跳过,所以如果我有task :a => :pre
和task :b => :pre
,如果我定义了第三个任务来运行这两个, task :c => [:a, :b]
,当我致电rake c
时,rake会调用:pre, :a, :b
,而不是:pre, :a, :pre, :c
我最终通过编写新任务得到了我想要的行为:
namespace :test do
task :all do
Rake::Task['test:units'].invoke
Rake::Task['db:test:prepare'].execute
Rake::Task['test:functionals'].invoke
end
end
有更好的方法吗?或者一种声明依赖项是必需或某些东西的方法? Rake :: Task有一个#reenable方法,我希望它允许一个变通方法,比如在执行结束时让“准备”任务重新启用,这样当第二个任务依赖于它时它会被再次调用,但它似乎没有那样工作。