我正在使用Rspec测试延迟::作业。
在我的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没有激发作业。
编辑:应该运行的两个作业将其run_at设置为未来。work_off是否会解雇那些本不应该立即完成的工作?
尽管这可能是一个较老的问题,但有一个参数没有太多文档记录,请尝试使用
Delayed::Worker.new(quiet: false).work_off
为了调试后台作业的结果,这可以帮助您发现它们应该在未来运行的事实是否干扰了断言本身。
编辑:完成后不要忘记去掉"quiet:false",否则您的测试将始终输出后台作业的结果。
构造
Delayed::Worker.new.work_off
立即处理DJ队列中的所有内容,并且与调用者在同一个线程中(它不会生成单独的工作线程)。但这并不能解释为什么你没有得到[2,0]的结果。
要回答您最初的问题"我应该如何调试以找出work_off为什么不解雇作业?",我建议您使用回调挂钩来跟踪作业的生命周期。如果需要向您展示如何操作,请添加注释…:)