Как запустить параллельные запросы, используя спецификацию контроллера RSpec? - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь запустить 5 запросов одновременно, используя потоки и RSpec, но это дает мне ошибку AbstractController::DoubleRenderError.Я думаю, что RSpec совместно использует один и тот же "контекст" для запросов.

context 'when the request is duplicated' do
  it 'blocks duplicate requests' do
    expect{

      threads = 5.times.map do
        Thread.new { post :checkout }
      end
      threads.map(&:join)

    }.to change{
      PaymentTransaction.count
    }.by(1)
  end
end

Есть ли способ протестировать параллельные запросы, используя тесты контроллера RSpec, не вызывая такого рода исключения или разделяя ту же "среду"?

1 Ответ

0 голосов
/ 30 ноября 2018

Похоже, что RSpec не имеет официального решения для этого.Чтобы решить эту проблему, я спас исключение AbstractController::DoubleRenderError внутри потока.Это решило проблему, поэтому это не самое элегантное решение.

context 'when the request is duplicated' do
  it 'blocks duplicate requests' do
    expect{

      threads = 5.times.map do
        Thread.new do
          post :checkout
        rescue AbstractController::DoubleRenderError
        end
      end
      threads.map(&:join)

    }.to change{
      PaymentTransaction.count
    }.by(1)
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...