我正在使用collectiveidea/delayed_job。在我的RSpec测试中,[:before,:after,:success]钩子没有像我期望的那样被调用。

Delayed::Worker.delay_jobs = true(默认)时,我看到enqueue()挂钩被调用,仅此而已。这是我期望的行为,因为没有单独的任务来处理作业。

但是,当Delayed::Worker.delay_jobs = false推荐用于文档测试时,我看到我的process()方法被调用,但是没有任何钩子。

如果这不是预期的行为,那么我在做什么方面有什么建议吗? (我可以轻松地包含代码。)如果这是预期的行为,那么测试挂钩的策略是什么?

[旁注:delay_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)表单了-两种情况下我都看不到钩子。

最佳答案

collectiveidea/delayed_job github page上,我发现了与描述,修复和拉出相同的错误。大概是delay_job的更新版本可以解决此问题。

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

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

关于ruby-on-rails - 在delay_job中,当Delayed::Worker.delay_jobs为false时会调用 Hook 吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6865475/

10-11 06:39