Me gustaría verificar que se llame a los ganchos de devolución de llamada de delay_job, pero no veo cómo hacer que RSpec lo haga, especialmente cuando se trata de varias capas de clases.cómo probar los ganchos de devolución de llamada de delayyed_job utilizando RSpec
Suponiendo que tengo un modelo ActiveRecord como esto:
class MyJob < ActiveRecord::Base
def perform
# do some stuff
end
def after(job)
# called by delayed_job after perform completes
end
end
Conceptualmente, quiero una prueba RSpec lo largo de estas líneas (aunque sé que esto no es correcto):
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
He estudiado minuciosamente el stackoverflow, relishapp.com/rspec y todos los otros lugares en los que puedo pensar. No puede ser muy difícil, ¿verdad? (Apuesto a que @zetetic sabe la respuesta en su sueño ...;)
(Advertencia: Mi caso real utiliza una clase 'shim' entre MyJob y DJ. Una respuesta para este caso simple puede desencadenar un seguimiento más complejo -on!)
Si solo busca verificar que se llame 'after', couldn ' t soltar el requisito '.with (an_instance_of ...'? Como nota al margen, tiendo a utilizar Delayed :: Worker.new (: quiet => true) .work_off para silenciar al trabajador y cualquier lloriqueo que pueda Sí. Lo admito, podría haber una excepción que no veo por eso. – Nick