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)
那么我该如何解决我的问题呢?
好的,我得到了答案。
这是您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任务
我知道已经晚了,但我认为你不需要这样做invoke并且有reenable任务。
据我了解,你只需要execute像这样:
Rake::Task['tasks:my_task_name'].execute
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1658 次 |
| 最近记录: |