Доступ к данным из глобальной очереди в Rspec - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть около ста файлов спецификаций, которые работают параллельно, используя parallel_rspec.Каждая спецификация зависит от идентификатора продукта, который необходим для запуска спецификации.Я хочу иметь возможность запускать спецификации для разных продуктов каждый раз.Как получить спецификацию, чтобы выбрать 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

Я хочу построить очередь, в которой я могу хранить несколько сотен идентификаторов продуктов, из которых каждый пример может выбрать один при запуске и поместить его обратно в очередь, чтобы другие примеры могли его использовать.

Я пробовал что-то вроде

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 спецификаций и доступно ограниченное количество продуктов.Другая проблема заключается в том, что всегда есть вероятность, что 2 спецификации будут работать параллельно, пытаясь получить доступ к одному и тому же продукту из очереди.Как я могу сделать это безопасным для этого?Также открыт для альтернативной реализации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...