问题描述
我在 rspec 中使用 vcr 来匹配保存 url 并播放它们,在配置中我对 match_requests_on
使用以下设置:
match_requests_on: [:method,:host,:path]
但是我只想修改某些 url 的这个配置,例如,如果一个 url 包含 /somepath/
,那么我只想将此 url 的配置更改为 match_requests_on: [:method,:path,:body]
有没有办法做到这一点在 vcr 或 rspec 配置文件中?
我似乎找不到任何地方可以在全球范围内通过 vcr 调用更改它。
解决方法
您可能需要使用自定义匹配器。
匹配器只是一个使用两个参数调用的 Proc/lambda:request_1 和 request_2。相等时返回 true,否则返回 false。
所以你想要的是
my_fancy_matcher = lambda do |r1,r2|
case r1.path # IDK if path is a real method,but it's just an example
when '/foo'
r1.parsed_uri == r2.parsed_uri
when '/bar'
r1.method == r2.method && r1.parsed_uri == r2.parsed_uri
else
false
end
直接使用
VCR.use_cassette('hatever',match_requests_on: [my_fancy_matcher]) do
## tests here
end
当你让 lambda 像你想要的那样工作时,如果你在你的规范中到处使用它,你可以注册它:
VCR.configure do |c|
c.hook_into :webmock
c.cassette_library_dir = 'cassettes'
c.register_request_matcher :my_fancy_matcher do |request_1,request_2|
# the logic here
end
end