2

Rspecを使用してDelayed::Jobをテストしています。

私の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

Delayed :: Job.countは期待どおりに通過しますが、Delayed :: Worker.new.work_offは[0,0]として返され、2つのジョブがある場合に成功と失敗が0であることを示します。

work_offがジョブを起動しない理由を見つけるためにデバッグするにはどうすればよいですか。

編集:実行することになっている2つのジョブでは、run_atが将来設定されています。work_offは、即時を意図していないジョブを起動しますか?

4

2 に答える 2

0

コンストラクト

Delayed::Worker.new.work_off

DJ キューにあるすべてのものを、呼び出し元と同じスレッドですぐに処理します (別のワーカー スレッドを生成しません)。しかし、これは結果が [2, 0] にならない理由を説明していません。

「work_off がジョブを起動しない理由を調べるには、どのようにデバッグすればよいですか?」という最初の質問に答えるには、コールバック フックを使用してジョブのライフサイクルを追跡することをお勧めします。その方法を示す必要がある場合は、コメントを追加してください... :)

于 2013-02-19T06:56:06.413 に答える
0

これは古い質問かもしれませんが、あまり文書化されていないパラメーターが 1 つあります。

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

バックグラウンド ジョブの結果をデバッグする場合、将来実行されるはずのジョブがアサート自体を台無しにしているかどうかを調べるのに役立ちます。

編集:完了したら「quiet:false」を外すことを忘れないでください。そうしないと、テストは常にバックグラウンド ジョブの結果を出力します。

于 2013-02-15T09:41:02.417 に答える