在 RSpec 中两次调用相同的 rake 任务

28

我正在尝试使用RSpec测试一个Rake任务,为了这个目的我需要调用它两次,但它只被调用了一次。

it 'first test' do
    Rake::Task['my_rake_task'].invoke
    # rake task was processed
end

it 'second test' do
    Rake::Task['my_rake_task'].invoke
    # rake task was NOT processed
end
2个回答

44
如果一个 rake 任务已经被调用过一次,除非你使用以下方法之一,否则它不会再次运行:

@rake[@task_name].reenable

或者用此方式调用:

@rake[@task_name].execute


我不得不使用reenable,因为execute不像invoke一样接受参数。然后我不得不多次运行以修复它 - 请参见https://dev59.com/cY3da4cB1Zd3GeqPzGOQ#45530844 - iheggie
1
我在 setup 中执行了 invoke,并在 teardown 中执行了 reenable - Sathish

4
为了补充Guy Segev的回答,我建议您将以下内容添加到您的规范文件中。

  after(:each) do
    Rake::Task["task:name"].reenable
  end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接