используя webmock с огурцом - PullRequest
20 голосов
/ 25 мая 2011

Я использую 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'}

Я делаю что-то не так или нет?

Ответы [ 4 ]

49 голосов
/ 25 мая 2011

Прежде всего, если вы используете видеомагнитофон, вам не нужно настраивать webmock со строкой require 'webmock/cucumber' и WebMock.allow_net_connect!. Видеомагнитофон позаботится о любой необходимой конфигурации WebMock.

Запрос, который вызывает ошибку, выглядит так, как будто он исходит от Capybara. Когда вы используете один из драйверов javascript, capybara загружает ваше приложение с помощью простого стоечного сервера, а затем опрашивает специальный путь __identify__, чтобы он знал, когда завершится загрузка.

VCR включает поддержку игнорирования запросов локального хоста, чтобы это не мешало этому. Документы relish содержат полную информацию, но короткая версия заключается в том, что вам необходимо добавить конфигурацию видеомагнитофона следующим образом:

VCR.config do |c|
  c.ignore_localhost = true
end
22 голосов
/ 08 января 2013

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

require 'webmock/cucumber'
WebMock.disable_net_connect!(:allow_localhost => true)

в мой файл env.rb.

8 голосов
/ 15 ноября 2013

Расширение до Ответ Мирона Марстона .Если вам нужно сохранить localhost для чего-то другого, например, приложения Rack, для которого вы хотите, чтобы видеомагнитофон захватывал запрос, вам нужно будет создать собственный сопоставитель, а не игнорировать все запросы 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
7 голосов
/ 29 августа 2014

Если вы используете и 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)

Документирование этого здесь для людей, чтобы найти, когда гуглится для __identify__. Ошибки выглядят как ...

Real HTTP connections are disabled.
Unregistered request: GET http://127.0.0.1:59005/__identify__ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...