如何使用 VCR 为 Ruby/RSpec 动态生成多个 HTTP 模拟响应?
how do I dynamically generate multiple HTTP mock responses with VCR for Ruby/RSpec?
我正在点击 API,对于每个请求,盒式 YAML 文件中都有一个记录 request/response。但是,请求之间的唯一区别是查询参数中的 id
。
如何压缩我的 YAML 文件以便为每个请求动态生成 URL?
您可以在 VCR 中使用 Dynamic ERB Cassettes,您只需传入 :erb
选项,该选项的值可以是 true
或包含要传递的模板变量的散列到磁带:
ids = [0, 1, 2, 3]
VCR.use_cassette('dynamic_generated_requests', :erb => { :ids => ids }) do
# Make HTTP Requests
end
带有 ERB 的 YAML 文件
您的 YAML 文件将如下所示:
---
http_interactions:
<% ids.each do |id| %>
- request:
method: post
uri: https://api.example.com/path/to/rest_api/<%= id %>/method
body:
encoding: UTF-8
headers:
content-type:
- application/json
response:
status:
code: 200
message: OK
headers:
cache-control:
- no-cache, no-store
content-type:
- application/json
connection:
- Close
body:
encoding: UTF-8
string: '{"status_code": <%= id %>}'
http_version: '1.1'
recorded_at: Tue, 15 Jan 2019 16:14:14 GMT
<% end %>
recorded_with: VCR 3.0.0
注意:仍然使用.yml
文件扩展名,因为VCR通过:erb
选项处理ERB处理。
调试中:raw_cassette_bytes
如果你想调试它并确保 YAML 文件看起来不错,你可以使用 raw_cassette_bytes 方法打印出呈现的 YAML 文件:
puts VCR.current_cassette.send(:raw_cassette_bytes)
在 VCR.use_cassette 块中使用:
VCR.use_cassette('dynamic_generated_requests', :erb => { :ids => ids }) do
puts VCR.current_cassette.send(:raw_cassette_bytes)
# Make HTTP Requests
end
我正在点击 API,对于每个请求,盒式 YAML 文件中都有一个记录 request/response。但是,请求之间的唯一区别是查询参数中的 id
。
如何压缩我的 YAML 文件以便为每个请求动态生成 URL?
您可以在 VCR 中使用 Dynamic ERB Cassettes,您只需传入 :erb
选项,该选项的值可以是 true
或包含要传递的模板变量的散列到磁带:
ids = [0, 1, 2, 3]
VCR.use_cassette('dynamic_generated_requests', :erb => { :ids => ids }) do
# Make HTTP Requests
end
带有 ERB 的 YAML 文件
您的 YAML 文件将如下所示:
---
http_interactions:
<% ids.each do |id| %>
- request:
method: post
uri: https://api.example.com/path/to/rest_api/<%= id %>/method
body:
encoding: UTF-8
headers:
content-type:
- application/json
response:
status:
code: 200
message: OK
headers:
cache-control:
- no-cache, no-store
content-type:
- application/json
connection:
- Close
body:
encoding: UTF-8
string: '{"status_code": <%= id %>}'
http_version: '1.1'
recorded_at: Tue, 15 Jan 2019 16:14:14 GMT
<% end %>
recorded_with: VCR 3.0.0
注意:仍然使用.yml
文件扩展名,因为VCR通过:erb
选项处理ERB处理。
调试中:raw_cassette_bytes
如果你想调试它并确保 YAML 文件看起来不错,你可以使用 raw_cassette_bytes 方法打印出呈现的 YAML 文件:
puts VCR.current_cassette.send(:raw_cassette_bytes)
在 VCR.use_cassette 块中使用:
VCR.use_cassette('dynamic_generated_requests', :erb => { :ids => ids }) do
puts VCR.current_cassette.send(:raw_cassette_bytes)
# Make HTTP Requests
end