Я пытаюсь написать тест Rspec для одной из моих задач рейка, согласно this post by Stephen Hagemann.проверка задач рейка с помощью Rspec не принимает аргументы
lib/tasks/retry.rake
:
namespace :retry do
task :message, [:message_id] => [:environment] do |t, args|
TextMessage.new.resend!(args[:message_id])
end
end
spec/tasks/retry_spec.rb
:
require 'rails_helper'
require 'rake'
describe 'retry namespace rake task' do
describe 'retry:message' do
before do
load File.expand_path("../../../lib/tasks/retry.rake", __FILE__)
Rake::Task.define_task(:environment)
end
it 'should call the resend action on the message with the specified message_id' do
message_id = "5"
expect_any_instance_of(TextMessage).to receive(:resend!).with message_id
Rake::Task["retry:message[#{message_id}]"].invoke
end
end
end
Однако, когда я запускаю этот тест, я получаю следующее сообщение об ошибке:
Don't know how to build task 'retry:message[5]'
С другой стороны, если Я запускаю задачу без аргументов:
Rake::Task["retry:message"].invoke
Я могу получить вызов рейка, но тест не работает, поскольку нет message_id
.
Что не так с тем, как я передаю аргумент в задачу рейка?
Спасибо за помощь.
> рейк-задачи не должны делать ничего, они должны только называть вещи. Я никогда не пишу спецификации для своих рейк-задач, только то, что они называют. +1 – ocodo