我想测试一个工作人员,它自行排队(基于某些重试逻辑)。
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...
- 它不会等待 10 分钟就运行
- 我认为对
drain
的调用应该只运行第一个作业,并且我需要再次调用drain来运行更多作业。
我希望我的测试看起来像这样
SomeWorker.perform_async
SomeWorker.drain
...assert something is retrying...
SomeWorker.drain
...assert something is not retrying...
我该如何测试这个?
最佳答案
SomeWorker.drain
将继续在队列上运行作业,直到队列为空。如果您的作业将另一个作业排队,它也会运行该作业。
如果您只想运行单个作业,请使用 SomeWorker.perform_one
。
关于ruby - Sidekiq排出还执行通过perform_in排队的新作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62654330/