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个job时成功0次,失败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

虽然这可能是一个较老的问题,但有一个参数没有太多记录,请尝试使用

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

调试后台作业的结果,这可以帮助您找出它们应该在未来运行的事实是否与断言本身混淆。

编辑:完成后不要忘记取消“quiet:false”,否则您的测试将始终输出后台作业的结果。

于 2013-02-15T09:41:02.417 回答