Rspec 根据请求URI在VCR中设置默认选项

Rspec 根据请求URI在VCR中设置默认选项,rspec,vcr,Rspec,Vcr,在所有请求到example.com的规范中,我想忽略URI中关于请求匹配器的尾随id。像这样的 VCR.configure do |c| # omitted c.register_request_matcher :uri_ignoring_trailing_id do |request_1, request_2| # omitted end c.before_http_request(lambda { |req| req.uri =~ /example.com/ })

在所有请求到
example.com
的规范中,我想忽略URI中关于请求匹配器的尾随id。像这样的

VCR.configure do |c|
  # omitted
  c.register_request_matcher :uri_ignoring_trailing_id do |request_1, request_2|
    # omitted
  end

  c.before_http_request(lambda { |req| req.uri =~ /example.com/ }) do
    c.default_cassette_options = { match_requests_on: [ :uri_ignoring_trailing_id ] }
  end

end

在http\u request之前修改
中的全局配置是个坏主意,因为它会影响更改配置后发出的每个请求,而不仅仅是与
example.com
匹配的请求。我建议您改为这样做:

VCR.configure do |vcr|
  uri_matcher = VCR.request_matchers[:uri]
  vcr.register_request_matcher(:uri_ignoring_trailing_id_for_example_dot_com) do |req_1, req_2|
    if req_1.parsed_uri.host == "example.com" && req_2.parsed_uri.host == "example.com"
      # do your custom matching where you ignore trailing id
    else
      uri_matcher.matches?(req_1, req_2)
    end
  end

  vcr.default_cassette_options = { match_requests_on: [:method, :uri_ignoring_trailing_id_for_example_dot_com] }
end