有时我遇到同一个工作人员两次运行的情况 - 当用户一个接一个地快速发送请求时。我添加了条件:如果worker已经启动并且在worker payload
内是class Importer
- 不允许第二次启动队列。
现在我需要制定一个规范。我认为,像这样称呼smth不是一个好方法:
before { 2.times { Importer.perform } }
对这种竞争条件进行测试的最佳方法是什么? (通常:当您需要两次或更多次运行相同的查询时,以哪种方式测试Sidekiq worker)
答案 0 :(得分:0)
好的,所以没有答案。
我决定将其存根。在导入类中,我有Sidekiq::Workers.new
,因此在内部规范中,我将let(:sidekiq_workers)
块放在所有工作人员的参数中,例如queue
,payload
,args
等等。 / p>
然后在it
块内我正在调用方法,检查这样的查询是否已存在。该测试通过并返回“true”。我有另一个it
块没有存根的sidekiq工作者和测试传递带有“false”。