如何在rspec中调用rake任务

MKu*_*mar 10 rake rspec rspec-rails ruby-on-rails-3

我试图在我的rspec中调用rake任务.

  require "rake"
  rake = Rake::Application.new
  Rake.application = rake
  rake.init
  rake.load_rakefile
  rake['rake my:task'].invoke
Run Code Online (Sandbox Code Playgroud)

但我收到了错误

 Failure/Error: rake['rake db:migrate'].invoke
 RuntimeError:
   Don't know how to build task 'rake db:migrate'
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何在rspec代码中调用rake任务.

任何帮助将受到高度赞赏.

stu*_*rtc 12

小命名空间的问题,任务是db:migrate不rake db:migrate一样的命令行用法.

所以改成它应该有助于:

rake['db:migrate'].invoke
Run Code Online (Sandbox Code Playgroud)


Val*_*ala 11

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

在您的spec_helper(或rails_helper更新版本的rspec-rails):

require "rake"
Rails.application.load_tasks
Run Code Online (Sandbox Code Playgroud)

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

Rake::Task['my:task'].invoke
Run Code Online (Sandbox Code Playgroud)


小智 3

要将方括号中的参数传递给invoke:

rake sim:manual_review_referral_program[3,4]
Run Code Online (Sandbox Code Playgroud)

变成:

rake['sim:manual_review_referral_program'].invoke(3,4)
Run Code Online (Sandbox Code Playgroud)

如果您args在数组中,您可以执行以下操作:

args = [3,4]
rake['sim:manual_review_referral_program'].invoke(*args)
Run Code Online (Sandbox Code Playgroud)

更多信息请参见 StackOverflow 问题:如何从 Rake 任务中运行 Rake 任务?。