ruby-on-rails - Rspec + savon + vcr 不录制

标签 ruby-on-rails rspec savon vcr

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

spec_helper.rb

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

并测试:
describe SomeClass do
  describe '#foo', vcr: true do
    it 'should do http request', do
      expect(subject.do_request).to be_true
    end
  end
end

运行该规范会导致:
.HTTPI executes HTTP GET using the net_http adapter
SOAP request: (...)

就像没有录像机一样。不幸的是,documentation 中什么都没有| .我发现报告了类似的问题 here ,但需要 httpi没有任何效果。应该怎么做才能使这个工作?

最佳答案

为了让 VCR 记录正确匹配的 SOAP 请求,我指定了更多的匹配器供它使用。由于使用 SOAP,url 端点通常相同,但每个请求的正文内容/ header 不同。注意,:method, :uri, :headers。您也可以在 body 上匹配它,但这对于我的用例来说已经足够了,因为我们的 header 每个请求都非常详细。我正在使用这个:

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 配置,例如:
describe SomeClass do
  describe '#foo', vcr: {} do
    # test something
  end
end

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

关于ruby-on-rails - Rspec + savon + vcr 不录制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20667642/

相关文章:

javascript - rails : Simple Ajax post to filter index results

ruby-on-rails - aws-s3 gem 和 right_aws gem 之间的 Rails Paperclip 冲突。怎么解决?

ruby-on-rails - rails - 为枚举字段应用默认值

ruby - rspec 检查一个方法是否调用另一个方法

soap - 覆盖 WSDL 的 "soap:address location"值?

ruby-on-rails - Heroku 上的 'Reset' 和 'Destroy' 数据库与 Postgres 之间的区别?

ruby rspec 错误“预期 : 1 got: #<Proc:0x000000019155b8@/home

Ruby "multiply"函数攻略

ruby-on-rails - 为什么 savon client.call 使用带有有效负载的 GET 请求而不是 POST?

ruby - 使用 Magento SOAP API v1 和 Savon Ruby Gem v2 创建类别时获取 'Error cannot find parameter'