Как динамически генерировать несколько ложных ответов HTTP с VCR для Ruby / RSpec? - PullRequest
0 голосов
/ 15 января 2019

Я использую API, и для каждого запроса в файле кассеты YAML был записан запрос / ответ. Однако единственная разница между запросами заключалась в id в параметрах запроса.

Как мне сжать файл YAML, чтобы URL-адреса создавались динамически для каждого запроса?

1 Ответ

0 голосов
/ 15 января 2019

Вы можете использовать Динамические ERB-кассеты с видеомагнитофоном, вам просто нужно передать параметр :erb, который может иметь значение true, или хэш, содержащий переменные шаблона, которые будут переданы в кассета:

ids = [0, 1, 2, 3]
VCR.use_cassette('dynamic_generated_requests', :erb => { :ids => ids }) do
  # Make HTTP Requests
end

Файл YAML с ERB

И ваш файл 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 по-прежнему используется, поскольку видеомагнитофон обрабатывает обработку ERB с помощью параметра :erb.

Отладка: raw_cassette_bytes

Если вы хотите отладить это и убедиться, что YAML-файл выглядит хорошо, вы можете распечатать визуализированный YAML-файл с помощью метода raw_cassette_bytes :

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
...