rubyonrails3-将webmock与cucumber结合使用



我正在使用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__ 

相关内容

  • 没有找到相关文章

最新更新