Я бы хотел убедиться, что перехватываются обратные вызовы delayed_job, но я не понимаю, как заставить это сделать RSpec, особенно когда задействовано несколько уровней классов.
Предполагается, что у меня есть модель ActiveRecord, подобная этой:
class MyJob < ActiveRecord::Base
def perform
# do some stuff
end
def after(job)
# called by delayed_job after perform completes
end
end
Концептуально , я хочу провести тест RSpec по этим направлениям (хотя я знаю, что это неправильно):
it 'should call the :after callback hook' do
my_job = MyJob.create
my_job.should_receive(:after).with(an_instance_of(Delayed::Backend::ActiveRecord::Job))
Delayed::Job.enqueue(my_job)
Delayed::Worker.new.work_off
end
Я изучил stackoverflow, relishapp.com/rspec и все остальные места, о которых могу подумать. Это не может быть слишком сложно, верно? (Держу пари, @zetetic знает ответ во сне ...;)
(Предостережение: Мой реальный случай использует класс shim между MyJob и DJ. Ответ на этот простой случай может вызвать более сложное продолжение!)