Я пытаюсь протестировать конфигурацию повторных попыток работника ActiveJob, используя экземпляр double, но это не удается.
У меня есть это на работе:
class MyWorker < ApplicationJob
retry_on MyError, wait: 30.minutes, attempts: 3
def perform
raise MyError
end
end
Тест выглядит так:
context "retry job" do
let(:instance) { instance_double(MyWorker) }
it "retries after 30 minutes" do
allow(MyWorker).to receive(:new).and_return(instance)
allow(instance).to receive(:perform_now)
expect(instance).to receive(:retry_job)
.with({ priority: nil, queue: nil, wait: 30.minutes.to_i })
MyWorker.perform_now
end
end
Этот тест разбивается на:
Failure/Error:
expect(instance).to receive(:retry_job)
.with({ priority: nil, queue: nil, wait: 30.minutes.to_i })
(InstanceDouble(MyWorker) (anonymous)).retry_job({:priority=>nil, :queue=>nil, :wait=>1800})
expected: 1 time with arguments: ({:priority=>nil, :queue=>nil, :wait=>1800})
received: 0 times
Если я использую allow_any_instance_of
для проверки повтора, тест пройден, но я хотел бы понять, как проверить это с использованием экземпляра double.