在 Sidekiq 中,如果出现异常,作业将被放置在重试队列中。由于任务是异步运行的,因此 MyWorker.perform_async(...) 永远不会抛出在任务代码中生成的异常。
然而,在测试中,发生在任务中的异常并不会使任务被放置在重试队列中。异常会从 perform_async 冒泡出来。因此,在测试中发生的事情是在实际运行代码时不可能发生的。
那么,如何最好地测试触发可能失败并被放置在重试队列中的作业的代码呢?
请注意,以下内容在测试中似乎没有任何效果:
Sidekiq.default_worker_options = { :retry => true}
然而,在测试中,发生在任务中的异常并不会使任务被放置在重试队列中。异常会从 perform_async 冒泡出来。因此,在测试中发生的事情是在实际运行代码时不可能发生的。
那么,如何最好地测试触发可能失败并被放置在重试队列中的作业的代码呢?
请注意,以下内容在测试中似乎没有任何效果:
Sidekiq.default_worker_options = { :retry => true}
a=f(x); Worker.perform_async(a); y(a)
。我无法在测试环境中运行该代码,因为任何导致任务失败的数据都无法使用。如果您认为有意义,我很乐意在GitHub上讨论并创建拉取请求。如果不是这样,那么这是您的项目,我感谢您的工作。 - Mark Bolusmjakinline
模式。请在测试中使用fake
模式。https://github.com/mperham/sidekiq/wiki/Testing - Mike Perham