【问题标题】:How can I test Sidekiq job failures?如何测试 Sidekiq 作业失败?
【发布时间】:2015-09-30 19:54:35
【问题描述】:

sidekiq 中的作业,一旦出现异常,将被放入重试队列。

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

然而,在测试中,任务中发生的异常不会导致任务被放入重试队列。异常从perform_async 中冒出。

所以测试中发生的事情是运行代码时不可能发生的事情。

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

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

【问题讨论】:

    标签: ruby unit-testing integration-testing sidekiq


    【解决方案1】:

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

    【讨论】:

    • 我没有测试 sidekiq。我的代码是a=f(x); Worker.perform_async(a); y(a)。我无法在包含导致任务失败的任何数据的测试环境中运行该代码。如果您认为有意义,很高兴在 github 上讨论并创建拉取请求。如果没有,这是你的项目,我感谢你的工作。
    • 那是因为你正在运行inline。对该测试使用fake 模式。 github.com/mperham/sidekiq/wiki/Testing
    • @MikePerham 也是如此。如果没有重试测试,您将如何进行具有外部端点的端到端测试,必须重试超时直到成功。成功导致其他行动。这不是测试 Sidekiq,但重试是成功流程的一部分,可以在测试环境之外工作。您可以只测试 Sidekiq 是否发送了正确的信息,但这不是端到端测试。
    • 有多种方法可以使用 sidekiq 定义自定义错误处理,这绝对是您想要测试的代码。
    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2015-03-29
    • 2015-03-28
    相关资源
    最近更新 更多