在delayed_job中,当Delayed :: Worker.delay_jobs为false时,是否调用了挂钩?

时间:2011-07-28 20:49:31

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

我正在使用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)表单 - 在任何一种情况下我都看不到挂钩被调用。]

1 个答案:

答案 0 :(得分:0)

collectiveidea/delayed_job github page上,我发现了这个描述,修复和拉动的错误。据推测,delayed_job的更新版本将解决问题。

更新:除了提取最新版本之外,我找到了一个解决方法。您可以显式调用Delayed :: Job worker方法。它将处理队列中的项目 - 当然与测试在同一个线程中 - 但是回调钩子会被调用:

[successes, failures] = Delayed::Worker.new.work_off