我正在使用collectiveidea/delayed_job。在我的RSpec测试中,[:before,:after,:success]钩子没有像我期望的那样被调用。
当Delayed::Worker.delay_jobs = true
(默认值)时,我看到enqueue()
挂钩被调用,仅此而已。这是我期望的行为,因为没有单独的任务处理作业。
但是当Delayed::Worker.delay_jobs = false
,正如文档测试所推荐的那样,我看到我的process()方法被调用,但没有一个钩子。
如果这不是预期的行为,对我做错的任何建议? (我可以很容易地包含代码。)如果这是预期的行为,那么测试钩子的策略是什么?
[旁注:delayed_job的spec目录,特别是performable_method_spec tests,建议你可以设置Delayed::Worker.delay_jobs = false
并仍然可以回调你的钩子。但是那些测试使用obj.delay.method
构造而不是Delayed::Job.enqueue(object_with_a_perform_method)
来排队。这会有所作为吗?]
[更新:我已经尝试了obj.delay.method
表单以及Delayed::Job.enqueue(obj_with_a_perform_method)
表单 - 在任何一种情况下我都看不到挂钩被调用。]
答案 0 :(得分:0)
在collectiveidea/delayed_job github page上,我发现了这个描述,修复和拉动的错误。据推测,delayed_job的更新版本将解决问题。
更新:除了提取最新版本之外,我找到了一个解决方法。您可以显式调用Delayed :: Job worker方法。它将处理队列中的项目 - 当然与测试在同一个线程中 - 但是回调钩子会被调用:
[successes, failures] = Delayed::Worker.new.work_off