我想驗證的是delayed_job回調掛鉤正在調用,但我不明白如何讓RSpec來做到這一點,特別是涉及幾層類時。如何使用RSpec測試delayed_job回調掛鉤
假設我有一個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在睡夢中知道答案......)
(警告:我的實際案例在MyJob和DJ之間使用了'shim'類,這個簡單案例的答案可能觸發更復雜的跟隨-on!)
如果你正在尋找只調用''之後',couldn'作爲一個方面說明,我傾向於使用Delayed :: Worker.new(:quiet => true).work_off來使工作人員保持沉默,並且可能會發出任何嗚嗚聲我承認雖然可能有一個例外,我沒有看到因爲這個 – Nick