如何在rspec中调用rake任务

时间:2012-12-04 14:19:43

标签: ruby-on-rails-3 rspec rake rspec-rails

我正试图在我的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 个答案:

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