Как вызвать задачу rake в rspec

Я пытаюсь вызвать задачу rake в моем rspec.

  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'

Есть ли у кого-нибудь идея, как мы можем вызвать команду rake в коде rspec.

Любая помощь будет высоко оценена.

Ответ 1

Передать аргументы в квадратных скобках на 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?.

Ответ 2

Небольшая проблема с именами, задача db:migrate not rake db:migrate как использование командной строки.

Поэтому изменение этого параметра должно помочь:

rake['db:migrate'].invoke

Ответ 3

Более простое решение для Rails с Rspec:

В spec_helper (или rails_helper для новых версий rspec-rails):

require "rake"
Rails.application.load_tasks

Затем, когда вы хотите вызвать свою задачу, вы можете сделать следующее:

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