如何在Rails

时间:2016-04-13 07:09:22

标签: ruby-on-rails ruby-on-rails-4 minitest

我在一个文件中编写了多个测试用例,我想在每个测试中单独运行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

那么我怎样才能解决我的问题呢?

2 个答案:

答案 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)

我知道已经晚了,但是我认为您不需要invokereenable一个任务。

据我了解,您只需要execute就可以了,

Rake::Task['tasks:my_task_name'].execute