我正在使用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/