某些特定 RSpec 测试的自定义 VCR 请求匹配选项
Custom VCR request matching options for some specific RSpec tests
我的 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
参数动态更改设置。
:vcr
元数据可以设置为将用于插入的盒式磁带的选项哈希。因此你可以做
it 'reverts transaction', vcr: { :match_requests_on => [:uri, :method, :body] } do
# something
end
为了让它更好,您可以将该散列分配给一个变量,然后将其设置为 :vcr
选项。如果你想走得更远,你需要创建自己的 RSpec before/after 设置键关闭你自己的元数据名称,然后不在元数据中包含 :vcr
(因为你需要做你自己的 (insert_cassette) 调用)。请参阅 https://github.com/vcr/vcr/blob/31e2cba76c0c9a60c3de5d5ece1c87563bfeacf7/lib/vcr/test_frameworks/rspec.rb#L32 了解 before/after 挂钩 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
所以请求匹配规则只匹配 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
参数动态更改设置。
:vcr
元数据可以设置为将用于插入的盒式磁带的选项哈希。因此你可以做
it 'reverts transaction', vcr: { :match_requests_on => [:uri, :method, :body] } do
# something
end
为了让它更好,您可以将该散列分配给一个变量,然后将其设置为 :vcr
选项。如果你想走得更远,你需要创建自己的 RSpec before/after 设置键关闭你自己的元数据名称,然后不在元数据中包含 :vcr
(因为你需要做你自己的 (insert_cassette) 调用)。请参阅 https://github.com/vcr/vcr/blob/31e2cba76c0c9a60c3de5d5ece1c87563bfeacf7/lib/vcr/test_frameworks/rspec.rb#L32 了解 before/after 挂钩 VCR 安装。