2013-02-10 73 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

相关问题