10

我正在尝试在我的 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 任务。

任何帮助将不胜感激。

4

3 回答 3

12

小命名空间问题,任务db:migrate不像rake db:migrate命令行使用。

因此,将其更改为此应该会有所帮助:

rake['db:migrate'].invoke
于 2012-12-04T14:33:51.280 回答
11

使用 Rspec 的 Rails 更简单的解决方案:

在您的spec_helper(或rails_helper对于较新版本的 rspec-rails)中:

require "rake"
Rails.application.load_tasks

然后,当您想调用您的任务时,您可以执行以下操作:

Rake::Task['my:task'].invoke
于 2015-02-20T17:54:27.700 回答
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 任务?.

于 2014-01-06T08:40:36.343 回答