J'aimerais vérifier que les hooks de callback delayed_job sont bien appelés, mais je ne vois pas comment faire pour que RSpec le fasse, surtout lorsque plusieurs couches de classes sont impliquées.
Je suppose que j'ai un modèle ActiveRecord comme celui-ci :
class MyJob < ActiveRecord::Base
def perform
# do some stuff
end
def after(job)
# called by delayed_job after perform completes
end
end
Sur le plan conceptuel Je veux un test RSpec de ce type (même si je sais que ce n'est pas correct) :
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
Je me suis penché sur stackoverflow, relishapp.com/rspec et tous les autres endroits auxquels je peux penser. Cela ne doit pas être trop difficile, n'est-ce pas ? (Je parie que @zetetic connaît la réponse dans son sommeil... ;)
(Avertissement : dans mon cas concret, j'utilise une classe "shim" entre MyJob et DJ. Une réponse à ce cas simple peut déclencher une suite plus complexe).