ruby - Sidekiq排出还执行通过perform_in排队的新作业

标签 ruby sidekiq worker

我想测试一个工作人员,它自行排队(基于某些重试逻辑)。

class SomeWorker
  def perform
    SomeWorker.perform_in(10.minutes)
  end
end
SomeWorker.perform_async
SomeWorker.drain # => This continously enqueus and runs the job
...assert something...
  1. 它不会等待 10 分钟就运行
  2. 我认为对drain的调用应该只运行第一个作业,并且我需要再次调用drain来运行更多作业。

我希望我的测试看起来像这样

SomeWorker.perform_async
SomeWorker.drain
...assert something is retrying...
SomeWorker.drain
...assert something is not retrying...

我该如何测试这个?

最佳答案

SomeWorker.drain 将继续在队列上运行作业,直到队列为空。如果您的作业将另一个作业排队,它也会运行该作业。

如果您只想运行单个作业,请使用 SomeWorker.perform_one

Docs

关于ruby - Sidekiq排出还执行通过perform_in排队的新作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62654330/

相关文章:

ruby-on-rails - ActiveStorage Analyzer 作业延迟太高

multithreading - 未发出线程之间的 PyQt 信号

Angular : service worker configuration

ruby-on-rails - Ruby 中对象销毁的通知

ruby-on-rails - 在 Grape 和 Grape Entity gem 之间共享描述和类型

ruby-on-rails - 更新计划作业的参数

ruby-on-rails - 使用 sidekiq-unique-jobs gem

node.js - node.js 的 Heroku worker

ruby - 仅从 OAuth::AccessToken 获取响应代码,而不是实际响应

ruby - 如何获取数组并对每个元素进行操作