Использование webmock с огурцом
Я использую webmock и не работает для тестов огурца
В моем Gemfile
gem 'vcr'
gem 'webmock'
И в моих функциях /support.env.rb у меня есть
require 'webmock/cucumber'
WebMock.allow_net_connect!
Когда я запускаю тесты на огурцы, я получаю эту ошибку.
Real HTTP connections are disabled. Unregistered request:
GET http://127.0.0.1:9887/__identify__ with headers
{'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}
Я делаю что-то неправильно или не хватает?
Ответы
Ответ 1
Во-первых, если вы используете видеомагнитофон, вам не нужно настраивать webmock с помощью строки require 'webmock/cucumber'
и строки WebMock.allow_net_connect!
. Видеомагнитофон заботится о любой необходимой конфигурации WebMock для вас.
Запрос, вызывающий ошибку, выглядит так, как будто это происходит из Capybara. Когда вы используете один из драйверов javascript, capybara загружает ваше приложение с помощью простого сервера стойки, а затем проверяет специальный путь __identify__
, чтобы он знал, когда он закончил загрузку.
Видеомагнитофон включает поддержку игнорирования запросов localhost, чтобы он не мешал этому. смаковать документы имеют полную историю, но короткая версия заключается в том, что вам нужно добавить конфигурацию видеомагнитофона, например:
VCR.config do |c|
c.ignore_localhost = true
end
Ответ 2
У меня была такая же ошибка, хотя я не использую видеомагнитофон. Я смог решить это, добавив:
require 'webmock/cucumber'
WebMock.disable_net_connect!(:allow_localhost => true)
в файл env.rb.
Ответ 3
Развернуть на ответ Майрона Марстона. Если вам нужно поддерживать локальный хост для чего-то другого, такого как приложение для стойки, которое может потребоваться для видеомагнитофона для захвата запроса, вам нужно будет создать собственный сопоставление, а не игнорировать все запросы localhost.
require 'vcr'
VCR.configure do |c|
c.hook_into :webmock
c.ignore_localhost = false
c.ignore_request do |request|
localhost_has_identify?(request)
end
end
private
def localhost_has_identify?(request)
if(request.uri =~ /127.0.0.1:\d{5}\/__identify__/)
true
else
false
end
end
Ответ 4
Если вы используете RSpec и Cucumber, вам может понадобиться создать два конфигурационных файла для WebMock (при использовании с видеомагнитофоном):
# spec/support/webmock.rb
# Config for RSpec
require 'webmock/rspec'
WebMock.disable_net_connect!(allow_localhost: true)
# features/support/webmock.rb
# Config for Cucumber
require 'webmock/cucumber'
WebMock.disable_net_connect!(allow_localhost: true)
Документирование этого здесь для людей, чтобы найти, когда googling для __identify__
. Ошибки выглядят как...
Real HTTP connections are disabled.
Unregistered request: GET http://127.0.0.1:59005/__identify__