RSpec:测试sidekiq工人的竞争状况

时间:2016-10-03 16:44:05

标签: ruby-on-rails ruby multithreading rspec sidekiq

有时我遇到同一个工作人员两次运行的情况 - 当用户一个接一个地快速发送请求时。我添加了条件:如果worker已经启动并且在worker payload内是class Importer - 不允许第二次启动队列。

现在我需要制定一个规范。我认为,像这样称呼smth不是一个好方法:

before { 2.times { Importer.perform } }

对这种竞争条件进行测试的最佳方法是什么? (通常:当您需要两次或更多次运行相同的查询时,以哪种方式测试Sidekiq worker)

1 个答案:

答案 0 :(得分:0)

好的,所以没有答案。

我决定将其存根。在导入类中,我有Sidekiq::Workers.new,因此在内部规范中,我将let(:sidekiq_workers)块放在所有工作人员的参数中,例如queuepayloadargs等等。 / p>

然后在it块内我正在调用方法,检查这样的查询是否已存在。该测试通过并返回“true”。我有另一个it块没有存根的sidekiq工作者和测试传递带有“false”。