Подтвердить что ты не робот

Использование 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'}

Я делаю что-то неправильно или не хватает?

4b9b3361

Ответ 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__