Rspec игнорирует игнорирование в блоке before при использовании js: true? - PullRequest
0 голосов
/ 07 января 2019

Я тестирую приложение Rails, используя RSpec / Capybara и Webmock. Я устанавливаю js:true для определенного набора тестов, одновременно заглушая веб-запрос с помощью Webmock в блоке before.

Один из тестов прерывается с перерывами - возвращаемая ошибка в том, что я не заглушил веб-запрос (но у меня есть!).

<WebMock::NetConnectNotAllowedError: Real HTTP connections are disabled... >

Мои тесты настроены следующим образом:

RSpec.feature 'Viewing something', type: :feature, js: true do
  before do
    body = { 'report': [{ 'data': [1,2,3] }] }.to_json
    stub_request(:post, 'https://www.some-url.com').to_return(status: 200, body: body, headers: {'Content-Type' => 'aplication/json'})
    sign_in_user
  end
  # Failing test:
  it 'does something' do
    expect(page).to have_text 'Something'
  end
  # Passing test:
  context 'With a different stubbed result' do
    before do
      body = {'report': []}.to_json
      stub_request(:post, 'https://www.some-url.com').to_return(status: 200, body: body, headers: {'Content-Type' => 'aplication/json'})
    end
    it 'shows something else do
      expect(page).to have_text 'Something else'
    end
  end
end

Если я изменю свой основной блок перед тем, чтобы он входил в систему пользователя перед настройкой заглушки, тест проходит, т.е. это работает:

before do
    sign_in_user
    body = { 'report': [{ 'data': [1,2,3] }] }.to_json
    stub_request(:post, 'https://www.some-url.com').to_return(status: 200, body: body, headers: {'Content-Type' => 'aplication/json'})
end

Я предполагаю, что это потому, что сервер javascript начинает работать только тогда, когда он начинает «использовать его», т.е. когда я вхожу в систему пользователя. Так что, если я установлю свои заглушки до этого момента, их не будет?

В любом случае, я чувствую, что должен быть более хороший способ исправить это - способ, которым я все еще могу определить свои заглушки до запуска некоторого тестового кода в тесте javascript?

Любые идеи будут оценены!

...