如何在Rails中的同一文件中多次运行rake任务

Zia*_*mar 3 ruby-on-rails minitest ruby-on-rails-4

我在一个文件中编写了多个测试用例,我想在每个测试中单独运行 rake 任务。当我使用此命令运行测试用例时:

ruby -I test test/integration/my_test_file.rb 
Run Code Online (Sandbox Code Playgroud)

然后 rake 任务只运行一次。我的许多测试都失败了。但是如果我用这个命令单独运行所有失败的测试

ruby -I test test/integration/my_test_file.rb -n test_name
Run Code Online (Sandbox Code Playgroud)

然后所有的测试都通过了。

问题是 rake 任务在第一种情况下只运行一次。但是对于单个测试,每个测试用例每次都会运行 Rake 任务

这是我在测试文件中设置 rake 任务的方法

require "rake"
MyAppName::Application.load_tasks
Run Code Online (Sandbox Code Playgroud)

在每个测试用例中,我都有这个:

Rake::Task['tasks:my_task_name'].invoke
Run Code Online (Sandbox Code Playgroud)

那么我该如何解决我的问题呢?

Zia*_*mar 5

好的,我得到了答案。

这是您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
Run Code Online (Sandbox Code Playgroud)

这里Rake::Task['tasks:send_overdue_reminders'].reenable翻转@already_invoked的状态,你可以在同一个文件中多次调用rake任务


Car*_*cía 5

我知道已经晚了,但我认为你不需要这样做invoke并且有reenable任务。

据我了解,你只需要execute像这样:

Rake::Task['tasks:my_task_name'].execute
Run Code Online (Sandbox Code Playgroud)