如何调试未返回成功或失败的Delayed :: Worker.work_off

时间:2013-02-10 08:22:55

标签: ruby-on-rails-3 rspec delayed-job

我正在使用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次成功和0次失败。

我应该如何调试以找出work_off无法解雇作业的原因。

编辑:应该运行的2个作业,将run_at设置为将来。 work_off是否可以解雇那些不是立竿见影的工作?

2 个答案:

答案 0 :(得分:0)

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

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

调试后台作业的结果,这可以帮助你找出他们应该在将来运行的事实是否正在搞乱断言本身。

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

答案 1 :(得分:0)

构造

Delayed::Worker.new.work_off

立即处理DJ队列中的所有内容,并与调用者处于同一个线程中(它不会产生单独的工作线程)。但这并不能解释为什么你没有得到[2,0]的结果。

要回答您的原始问题'我应该如何调试以找出为什么work_off不会触发作业?',我建议您使用回调挂钩来跟踪作业的生命周期。如果需要显示如何执行此操作,请添加评论... :)

相关问题