如何测试Sidekiq作业失败?

z5h*_*z5h 7 ruby integration-testing unit-testing sidekiq

在例外情况下,sidekiq中的作业将被置于重试队列中.

因此,并且因为任务是异步运行的, MyWorker.perform_async(...)所以永远不会抛出在任务代码中生成的异常.

但是,在测试中,任务中发生的异常不会导致任务放入重试队列.异常泡沫了perform_async.

因此,在测试中发生的事情是运行代码时不可能发生的事情.

那么,什么是测试代码的最佳方法,这些代码会触发可能失败的作业并被置于重试队列中?

请注意,以下似乎对测试没有影响:
Sidekiq.default_worker_options = { :retry => true}

Mik*_*ham 6

它的设计很难,因为你不应该这样做.您不应该测试Sidekiq功能.测试您自己的代码,而不是其他库/框架提供的功能.

  • @MikePerham沿着同样的脉络.如果没有重试测试,您将如何进行具有外部端点的端到端测试,其中必须重试超时直到成功.成功导致其他行动.这不是测试Sidekiq,但是重试是成功流程的一部分,它可以在测试环境之外工作.您可以测试Sidekiq是否发送了正确的信息,但它不会是端到端测试. (7认同)
  • 有多种方法可以使用 sidekiq 定义自定义错误处理,这绝对是您想要测试的代码。 (3认同)