Chciałbym sprawdzić, czy wywołania zwrotne "opóźnienia_zwrotu" są wywoływane, ale nie widzę sposobu, aby to zrobić, szczególnie gdy dotyczy to kilku warstw klas.jak przetestować haki oddzwaniania delayed_job przy użyciu RSpeca
Zakładając Mam modelu ActiveRecord takiego:
class MyJob < ActiveRecord::Base
def perform
# do some stuff
end
def after(job)
# called by delayed_job after perform completes
end
end
Konceptualnie, chcę test RSpec wzdłuż tych linii (choć wiem, że to nie jest poprawna):
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
Poświęciłem się stackoverflow, relishapp.com/rspec i wszystkim innym miejscom, o których mogę pomyśleć. To nie może być zbyt trudne, prawda? (Założę się, że @zetetic zna odpowiedź we śnie ...;)
(Uwaga: Mój przypadek używa klasy "shim" między MyJob i DJ. Odpowiedź na ten prosty przypadek może wywołać bardziej złożoną obserwację -on!)
Jeśli chcesz tylko zweryfikować "po", nie można t zrzucisz wymaganie '.with (an_instance_of ...' Jako notatkę dodatkową, używam Delayed :: Worker.new (: quiet => true) .work_off, aby wyciszyć pracownika i każde marudzenie może Przyznaję jednak, że może istnieć wyjątek, którego nie widzę z tego powodu: – Nick