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