1

我有一个 rake 任务 db:test:prepare 旨在在运行测试之前清除测试数据库。似乎它神奇地依赖于 test、test:units 和 test:functionals 任务,这些任务被定义为某些核心库的一部分。

当我自己运行 test:units 或 test:functionals 之一时, 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 方法,我曾希望它允许一种变通方法,比如让“准备”任务在执行结束时重新启用,这样当第二个依赖它的任务出现时它会再次被调用,但它似乎并没有那样工作。

4

0 回答 0