【问题标题】:Custom VCR request matching options for some specific RSpec tests用于某些特定 RSpec 测试的自定义 VCR 请求匹配选项
【发布时间】:2018-05-31 21:50:42
【问题描述】:

我的 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参数动态更改设置。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多