我有大约一百个使用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多个规格和可用的有限产品。另一个问题是,总是有两个规格并行运行以尝试从队列中访问同一产品的机会。我该如何确保它安全?也开放使用替代实现