2013-02-10 74 views
1

我正在使用Rspec測試我的Delayed :: Job。如何調試不返回成功或失敗的Delayed :: Worker.work_off

以我rspec_controller:

it "queues up delayed job and fires" do 
    setup   
    expect { 
    post :create, {:job => valid_attributes} 
    }.to change(Delayed::Job, :count).by(2)  

    Delayed::Worker.new.work_off.should == [2,0] 

    end 

延遲:: Job.count通過如預期的,但延遲:: Worker.new.work_off返回爲[0,0],這表明有0的成功和失敗0當有2個工作。

我應該如何進行調試才能找出work_off不會觸發作業的原因。

編輯:應該運行的2個作業,將其run_at設置爲未來。 work_off是否會解僱那些並不是立竿見影的工作?

回答

0

雖然這可能是一個老問題,有說沒有太多的文件顯示只有一個參數,請嘗試使用

Delayed::Worker.new(quiet: false).work_off 

調試你的後臺作業的結果,這可以幫助你,如果事實,他們找出「應該在未來運行的是與自我斷言混爲一談。

編輯:當你完成後別忘記摘掉「quiet:false」,否則你的測試總是會輸出後臺作業的結果。

0

該構建

Delayed::Worker.new.work_off 

立即處理一切是在DJ隊列中,並且在相同的線程中調用者(它不產生一個單獨的工作線程)。但這並不能解釋爲什麼你沒有得到[2,0]的結果。

要回答您的原始問題'我應該如何調試才能找出work_off不會觸發作業?',我建議您使用回調掛鉤來跟蹤作業的生命週期。添加評論,如果你需要顯示如何做到這一點... :)

+0

我在我的測試用例中使用Delayed :: Worker.new(options).work_off。但突然它停止工作。我怎樣才能調試它? – 2016-09-01 09:24:41

相關問題