Я тестирую приложение 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?
Любые идеи будут оценены!