Как вызвать задачу 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