Rspec 测试 rake 任务

Rspec testing rake tasks

我有一个简单的 rake 任务,里面有 puts

namespace :atask
  task something: :environment do
    puts 'Foo'
  end
end

我的规格如下

describe 'atask:something' do
  before { MyApp.Application.load_tasks }

  context 'one' do
    it do
      Rake::Task['atask:something'].invoke
    end
  end

  context 'two' do
    it do
      Rake::Task['atask:something'].invoke
    end
  end

  context 'three' do
    it do
      Rake::Task['atask:something'].invoke
    end
  end
end

如您所见,它有 3 个上下文和 3 个块。所以我应该在控制台中看到 'Foo' 三次,每次调用任务一次。但是,我只在控制台中看到 'Foo' 一次,即使它被调用了三次。

事实证明,当 rake 任务已经 invoked 时,它不会再 运行 了。您必须在调用后 reenable 任务或使用 execute