如何在RSpec中调用一个Rake任务

11
我正在尝试在我的rspec中调用一个rake任务。
  require "rake"
  rake = Rake::Application.new
  Rake.application = rake
  rake.init
  rake.load_rakefile
  rake['rake my:task'].invoke

但是我遇到了错误

 Failure/Error: rake['rake db:migrate'].invoke
 RuntimeError:
   Don't know how to build task 'rake db:migrate'

有人知道怎样在rspec代码中调用rake任务吗?

非常感谢任何帮助。

3个回答

12

命名空间问题,任务是db:migrate而不是像命令行使用那样是rake db:migrate

因此将其更改为以下内容应该会有所帮助:

rake['db:migrate'].invoke

非常感谢。它确实有效。现在我有了自定义的rake任务,它被定义在'lib/tasks/'文件夹中。我该如何从rspec运行它? - MKumar
lib/tasks文件夹中,任何后缀为.rake的文件都将默认包含。由于您的Rakefile可能来自rails,因此该任务应该已加载并可用。 - stuartc
出现以下错误:Failure/Error: rake['sim:manual_review_referral_program[3]'].invoke RuntimeError: 不知道如何构建任务 'sim:manual_review_referral_program[3]' - MKumar
1
我不确定[3]是一项Rake任务的有效名称。 - stuartc
将其参数传递给rake任务“rake my:task[arg1,arg2]”。 - MKumar

12

在Rails中使用Rspec的一个更简单的解决方案:

在您的spec_helper(对于rspec-rails的新版本,请使用rails_helper)中:

require "rake"
Rails.application.load_tasks

那么当您想调用任务时,可以执行以下操作:

Rake::Task['my:task'].invoke

3

要在方括号中传递参数给invoke函数:

rake sim:manual_review_referral_program[3,4]

变成:

rake['sim:manual_review_referral_program'].invoke(3,4)

如果您的`args`是在一个数组中,您可以执行以下操作:
args = [3,4]
rake['sim:manual_review_referral_program'].invoke(*args)

在这个StackOverflow问题中,有更多信息:如何在Rake任务内运行Rake任务?


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