从Rspec中的全局队列访问数据

时间:2018-12-17 22:35:49

标签: ruby-on-rails ruby rspec

我有大约一百个使用parallel_rspec并行运行的规范文件。每个规范都依赖于运行规范所需的产品ID。我希望每次都能运行不同产品的规格。如何获得规格以从队列中选择product_id,在规格中使用它,并在完成后将其放回队列以用于其他测试? 规格示例:

describe 'Test 1' do
 let(:product) {Product.new(12345)}

  it 'checks something on the product page' do
    visit("/product/#{product.id}")
    # assert some data on the page
  end
end

我想建立一个队列,在其中可以存储数百个产品ID,每个示例在运行时都可以从中选择一个,并将其放回队列中,以供其他示例使用。

我尝试过类似的

class ProductPicker
  $product_ids = [1,2,3,4.....100]

  def self.pick
   product_id = $product_ids.sample
   $product_ids.delete(product_id)
  end
end

然后在规范中

let(:product) {ProductPicker.pick)}

这可行,但是如何将产品放回队列中?我需要将其放回队列中,因为在100个规格文件中,我有1000多个规格和可用的有限产品。另一个问题是,总是有两个规格并行运行以尝试从队列中访问同一产品的机会。我该如何确保它安全?也开放使用替代实现

0 个答案:

没有答案