我正在使用webmock,它不适用于黄瓜测试
在我的Gemfile 中
gem 'vcr'
gem 'webmock'
在我的features/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'}
我做错了什么还是少了什么?
首先,如果使用VCR,则不需要使用require 'webmock/cucumber'
行和WebMock.allow_net_connect!
行配置webmock。VCR会为您处理任何必要的WebMock配置。
触发错误的请求看起来像是来自Capybara。当你使用其中一个javascript驱动程序时,水豚会使用一个简单的机架服务器引导你的应用程序,然后轮询特殊的__identify__
路径,这样它就知道什么时候完成了引导。
VCR支持忽略localhost请求,这样它就不会对此产生干扰。趣味文档有完整的故事,但简短的版本是,你需要添加这样的VCR配置:
VCR.config do |c|
c.ignore_localhost = true
end
虽然没有使用VCR,但我也出现了同样的错误。我可以通过添加以下内容来解决此问题:
require 'webmock/cucumber'
WebMock.disable_net_connect!(:allow_localhost => true)
到我的env.rb文件。
扩展Myron Marston的答案。如果您需要为其他东西保留localhost,例如您可能希望VCR捕获请求的Rack App,则需要创建一个自定义匹配器,而不是忽略所有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
如果同时使用RSpec和Cucumber,则可能需要为WebMock创建两个配置文件(与VCR一起使用时):
# 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__