首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rspec + savon + vcr不录制

Rspec + savon + vcr不录制
EN

Stack Overflow用户
提问于 2013-12-19 04:21:46
回答 1查看 1.7K关注 0票数 5

我不能用vcr录制任何东西,我有这样的设置:

spec_helper.rb

代码语言:javascript
复制
require 'vcr'
VCR.configure do |c|
  c.cassette_library_dir = 'spec/cassettes'
  c.hook_into :webmock
  c.configure_rspec_metadata!
  c.default_cassette_options = { :record => :new_episodes }
end

和测试:

代码语言:javascript
复制
describe SomeClass do
  describe '#foo', vcr: true do
    it 'should do http request', do
      expect(subject.do_request).to be_true
    end
  end
end

运行该规范将导致:

代码语言:javascript
复制
.HTTPI executes HTTP GET using the net_http adapter
SOAP request: (...)

就像没有录像机一样。不幸的是,documentation中什么都没有。我发现类似的问题报告了here,但要求httpi不会有任何效果。应该怎么做才能让它正常工作呢?

EN

回答 1

Stack Overflow用户

发布于 2013-12-20 07:28:14

为了让VCR记录正确匹配的SOAP请求,我需要为它指定更多的匹配器。因为使用SOAP时,url端点通常是相同的,但是每个请求的主体内容/头是不同的。注意,:method,:uri,:headers。你也可以让它在主体上匹配,但这对我的用例来说已经足够了,因为我们的头部对于每个请求都是相当详细的。我使用的是:

代码语言:javascript
复制
VCR.configure do |c|
  c.hook_into :webmock # fakeweb fails with savon
  c.ignore_hosts 'www.some-url.com'
  c.configure_rspec_metadata!
  c.ignore_localhost                        = true
  c.cassette_library_dir                    = 'spec/support/vcr_cassettes'
  c.allow_http_connections_when_no_cassette = true
  c.default_cassette_options                = { allow_playback_repeats: true, match_requests_on: [:method, :uri, :headers] }
  # c.debug_logger                            = File.open(Rails.root.join('log/vcr.log'), 'w')
end

然后,我用一个空的散列标记规范,以防我想要覆盖全局VCR配置,如下所示:

代码语言:javascript
复制
describe SomeClass do
  describe '#foo', vcr: {} do
    # test something
  end
end

最后,你可以让VCR/Webmock忽略的请求越多,就越容易调试。因此,如果你有大量的JS调用或类似的调用,将这些请求添加到'ignore_hosts‘选项中。我在全局配置中的最后一行展示了如何让VCR记录它正在做什么,这也很有帮助。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20667642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档