ruby-on-rails - 测试 Sidekiq 的重试队列

标签 ruby-on-rails ruby testing sidekiq minitest

我们有一个相当关键的组件,如果满足某些条件,它会清除特定项目的 Sidekiq 重试队列。 Sidekiq 的测试 API 没有提供添加到重试队列的方法,所以我们必须想出一些自定义的东西。

最佳答案

添加到重试队列:

  def add_retry(object: @object, klass: 'HardWorker', at: Time.now.to_f)
    payload = Sidekiq.dump_json(
      class: klass,
      args: [object.id, object.class, 'sidekiq_retry_test'],
      queue: 'user_integration',
      jid: rand(1..10000),
      retry_count: 20,
      failed_at: Time.now.to_f
    )

    Sidekiq.redis do |conn|
      conn.zadd('retry', at.to_s, payload)
    end
  end

您可以更改有效负载哈希内的任何内容。您可能想要指定队列,或者添加更强大的解决方案来选择作业 ID。这正是对我们有用的方法。

事后您需要清理重试队列。您应该在 teardownafter(:all) block 内执行此操作。

  def cleanup_retry_queue
    Sidekiq::RetrySet.new.each do |job|
      job.delete if job.args[2] == 'sidekiq_retry_test'
    end
  end

请记住,这实际上会添加到队列中,所以要小心。仅当您有依赖于重试队列的可测试组件时才使用此选项。不要用它来测试 Sidekiq 的排队功能本身。

关于ruby-on-rails - 测试 Sidekiq 的重试队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43417896/

相关文章:

ruby-on-rails - 使用 HAML 生成单行注释?

rest - JerseyTest 缺少依赖项 com.google.common.collect.Sets

ruby-on-rails - 如何使用 Test::Unit 在全局 stub http 请求?

java - 在哪里可以找到数学解析器/引擎的测试?

ruby-on-rails - 在模块中扩展 self

ruby-on-rails - 实现 has_secure_password 后出现错误消息

ruby-on-rails - 配置 session_store.rb 来处理登台和生产?

ruby - ERB 中 ".each do |x|"的循环 Controller

javascript -/assets 404 上的 javascript_include_tag

ruby-on-rails - RVM ruby​​安装问题