我正试图在我的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任务。
任何帮助都将受到高度赞赏。
答案 0 :(得分:12)
小命名空间问题,任务是db:migrate
而不是rake db:migrate
,就像命令行使用一样。
所以改成它应该会有所帮助:
rake['db:migrate'].invoke
答案 1 :(得分:11)
使用Rspec的Rails更简单的解决方案:
在spec_helper
(或rails_helper
更新版本的rspec-rails中):
require "rake"
Rails.application.load_tasks
然后,当您想要调用任务时,您可以执行以下操作:
Rake::Task['my:task'].invoke
答案 2 :(得分: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问题的更多信息:How to run Rake tasks from within Rake tasks?。