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

Custom VCR request matching options for some specific RSpec tests

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

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

所以请求匹配规则只匹配 HTTP 方法和 URI。我想更改此设置以也匹配请求正文:

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

但由于我的项目中已经有很多测试,我想逐步进行,仅对某些测试激活此新限制,这样其他测试(使用旧盒式磁带)就不会中断.

是否有任何方法可以将参数传递给 RSpec 测试,以便仅针对某些特定测试或测试组具有自定义请求匹配规则?

我想像

it 'reverts transaction', :vcr, :body_matching => true do
    # something
end

然后根据body_matching参数动态更改设置。

:vcr 元数据可以设置为将用于插入的盒式磁带的选项哈希。因此你可以做

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

为了让它更好,您可以将该散列分配给一个变量,然后将其设置为 :vcr 选项。如果你想走得更远,你需要创建自己的 RSpec before/after 设置键关闭你自己的元数据名称,然后不在元数据中包含 :vcr (因为你需要做你自己的 (insert_cassette) 调用)。请参阅 https://github.com/vcr/vcr/blob/31e2cba76c0c9a60c3de5d5ece1c87563bfeacf7/lib/vcr/test_frameworks/rspec.rb#L32 了解 before/after 挂钩 VCR 安装。