某些特定RSpec测试的自定义VCR请求匹配选项

时间:2018-05-31 21:50:43

标签: ruby-on-rails rspec-rails vcr

我的Rails项目中有一堆RSpec测试,测试对外部REST API的HTTP调用,并使用VCR磁带记录请求和响应。目前我的VCR配置如下:

if( patientName!== 'undefined' ) {
    // foo could get resolved and it's defined
}

因此,请求匹配规则仅与HTTP方法和URI匹配。我想更改此设置以匹配请求正文:

VCR.configure do |c|
  c.cassette_library_dir = 'spec/vcr_cassettes'
  c.hook_into :webmock
  c.configure_rspec_metadata!
end

但是因为我的项目已经有很多测试,所以我想逐渐进行,只对一些测试激活这个新的限制,所以其他的(带旧磁带)不会破坏。 / p>

有没有办法将参数传递给RSpec测试,以便只为某些特定测试或测试组提供自定义请求匹配规则?

我想像

VCR.configure do |c|
  c.cassette_library_dir = 'spec/vcr_cassettes'
  c.hook_into :webmock
  c.configure_rspec_metadata!
  c.default_cassette_options = {
    :match_requests_on => [:uri, :method, :body],
  }
end

然后根据it 'reverts transaction', :vcr, :body_matching => true do # something end 参数动态更改设置。

1 个答案:

答案 0 :(得分:1)

:vcr元数据可以设置为一个Hash of options,用于插入的盒式磁带。因此你可以做到

it 'reverts transaction', vcr: { :match_requests_on => [:uri, :method, :body] } do
  # something
end

为了使它更好,您可以将该哈希值分配给变量,然后将其设置为:vcr选项。如果你想要进一步发展,你需要在设置之前/之后创建自己的RSpec,键入你自己的元数据名称,然后不要在元数据中包含:vcr(因为你需要自己做(insert_cassette))呼叫)。有关挂钩VCR安装前/后的信息,请参阅https://github.com/vcr/vcr/blob/31e2cba76c0c9a60c3de5d5ece1c87563bfeacf7/lib/vcr/test_frameworks/rspec.rb#L32