ver*_*4ka 2 ruby-on-rails rspec-rails vcr
我的 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
Run Code Online (Sandbox Code Playgroud)
因此请求匹配规则仅匹配 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
Run Code Online (Sandbox Code Playgroud)
但由于我的项目中已经有很多测试,我想逐步进行,仅对某些测试激活此新限制,这样其他测试(使用旧磁带)就不会中断。
有没有办法将参数传递给 RSpec 测试,以便仅针对某些特定测试或测试组制定自定义请求匹配规则?
我想象类似的事情
it 'reverts transaction', :vcr, :body_matching => true do
# something
end
Run Code Online (Sandbox Code Playgroud)
然后根据body_matching
参数动态更改设置。
元:vcr
数据可以设置为将用于插入的磁带的选项哈希。因此你可以做
it 'reverts transaction', vcr: { :match_requests_on => [:uri, :method, :body] } do
# something
end
Run Code Online (Sandbox Code Playgroud)
为了使它更好,您可以将该散列分配给一个变量,然后将其设置为选项:vcr
。如果您想更进一步,则需要在设置关闭自己的元数据名称之前/之后创建自己的 RSpec,然后不包含:vcr
在元数据中(因为您需要执行自己的 (insert_cassette) 调用)。请参阅https://github.com/vcr/vcr/blob/31e2cba76c0c9a60c3de5d5ece1c87563bfeacf7/lib/vcr/test_frameworks/rspec.rb#L32了解挂钩 VCR 安装之前/之后的信息。
归档时间: |
|
查看次数: |
2056 次 |
最近记录: |