Ruby 如何测试Sidekiq作业失败?

Ruby 如何测试Sidekiq作业失败?,ruby,unit-testing,integration-testing,sidekiq,Ruby,Unit Testing,Integration Testing,Sidekiq,异常时,sidekiq中的作业将被置于重试队列中 因此,并且由于任务是异步运行的,MyWorker.perform\u async(…)永远不会抛出任务代码中生成的异常 但是,在测试中,任务中发生的异常不会导致将任务放入重试队列。异常从perform\u async冒出 因此,在测试中发生的事情在运行代码时是不可能发生的 那么,测试触发可能失败并放入重试队列的作业的代码的最佳方法是什么 请注意,以下内容似乎对测试没有影响: Sidekiq.default\u worker\u options={

异常时,sidekiq中的作业将被置于重试队列中

因此,并且由于任务是异步运行的,
MyWorker.perform\u async(…)
永远不会抛出任务代码中生成的异常

但是,在测试中,任务中发生的异常不会导致将任务放入重试队列。异常从
perform\u async
冒出

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

那么,测试触发可能失败并放入重试队列的作业的代码的最佳方法是什么

请注意,以下内容似乎对测试没有影响:

Sidekiq.default\u worker\u options={:retry=>true}

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

我不是在测试sidekiq。我的代码是
a=f(x);Worker.perform_async(a);y(a)
。我不能在测试环境中使用任何导致任务失败的数据运行该代码。很高兴在github上讨论并创建一个pull请求(如果您认为有意义的话)。如果不是,那是你的项目,我感谢你的工作。那是因为你正在运行
内联
。对该测试使用
false
模式@米杰伯汉姆也是这样。如果在测试中没有重试,您将如何进行具有外部端点的端到端测试,在外部端点中必须重试超时,直到成功。成功会导致其他行动。这不是测试Sidekiq,但重试是成功流程的一部分,它将在测试环境之外工作。您可以测试Sidekiq是否发送了正确的信息,但这不是一个端到端的测试。有多种方法可以使用Sidekiq定义自定义错误处理,这绝对是您要测试的代码。