У меня есть активное задание Rails, которое создает несколько других заданий одного типа с разными параметрами. Я хочу проверить, что эта работа ставит другую работу в очередь с правильными параметрами.
Это в основном то, чего я пытаюсь достичь:
require 'rails_helper'
RSpec.describe TriggerJob, type: :job do
include ActiveJob::TestHelper
after do
clear_enqueued_jobs
end
it 'enqueues jobs for all model instances' do
model1 = create(:model)
model2 = create(:model)
model3 = create(:model)
expect { described_class.perform_now }
.to(have_enqueued_job(ModelJob).with { |arg| expect(arg.id).to be == model1.id }.exactly(:once))
.and(have_enqueued_job(ModelJob).with { |arg| expect(arg.id).to be == model2.id }.exactly(:once))
.and(have_enqueued_job(ModelJob).with { |arg| expect(arg.id).to be == model3.id }.exactly(:once))
end
end
Это не работает, потому что RSpe c кажется, просто соответствует типу класса задания, а затем пытается сравнить первые аргументы заданий с моим блоком. В зависимости от порядка в очереди это не удается. Мне бы хотелось, чтобы RSpe c совпадал с ЛЮБЫМИ заданиями в очереди ModelJob и не выполнялся, если не удалось найти совпадения в очереди.
Кроме того, я хотел бы проверить, что других заданий ModelJob не существует. с другими параметрами, но это не обязательно.