Sidekiq drain 还执行通过 perform_in 排队的新作业

Sidekiq drain also performs new jobs enqueued via perform_in

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

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 将在队列中保留 运行ning 个作业,直到队列为空。如果您的作业将另一个作业排入队列,它也会 运行。

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

Docs