我在一个文件中编写了多个测试用例,我想在每个测试中单独运行rake任务。 当我使用此命令运行测试用例时:
ruby -I test test/integration/my_test_file.rb
然后rake任务只运行一次。我的许多测试都失败了。 但是,如果我使用此命令单独运行所有失败的测试
ruby -I test test/integration/my_test_file.rb -n test_name
然后所有测试都通过了。
问题是rake任务在第一种情况下只运行一次。 但对于个别测试,每次测试用例都会运行Rake任务。
这是我如何在我的测试文件中设置rake任务
require "rake"
MyAppName::Application.load_tasks
在每个测试用例中我都有:
Rake::Task['tasks:my_task_name'].invoke
那么我怎样才能解决我的问题呢?
答案 0 :(得分:3)
好的我得到了答案。
以下是在同一范围内再次调用Rake::Task['tasks:task_name']
的方法,无论您是想在控制器文件中还是在测试文件中运行rake任务。
每当Rake::Task['tasks:my_task_name'].invoke
执行时,它会设置一个标志 @already_invoked ,这意味着您无法在同一个文件中再次调用该任务。
所以你可以这样做
Rake::Task['tasks:my_task_name'].invoke
Rake::Task['tasks:send_overdue_reminders'].reenable
此处Rake::Task['tasks:send_overdue_reminders'].reenable
翻转 @already_invoked 的状态,您可以在同一个文件中多次调用rake任务
答案 1 :(得分:2)
我知道已经晚了,但是我认为您不需要invoke
和reenable
一个任务。
据我了解,您只需要execute
就可以了,
Rake::Task['tasks:my_task_name'].execute