Кассета VCR с пустым телом возвращает ноль вместо пустой строки
У меня есть API, на котором я пытаюсь написать некоторые спецификации и макетировать запросы, используя гем VCR. У меня проблема в том, что когда API возвращает пустое тело, Ruby интерпретирует это как пустую строку. Однако, когда я использую видеомагнитофон для создания кассеты для макетирования запроса API, он возвращает nil
, Я могу легко написать код вокруг этого, чтобы изменить запрос обратно в пустую строку resp = '' if resp.nil?
или условно написать код о том, как справиться с этим, когда придет время resp.nil? || resp.empty?
или Активные Поддержки #blank?
но я бы предпочел не писать код, чтобы просто удовлетворить мои требования.
test_spec.rb
require 'net/http'
require 'vcr'
require 'syck'
def vcr_test
uri_host = 'www.mocky.io'
uri_port = 80
route = '/v2/562e9e7f1100001236933b4b'
http = Net::HTTP.new(uri_host, uri_port)
resp = http.get(route)
resp.body
end
VCR.configure do |c|
c.cassette_library_dir = 'spec/support/vcr'
c.hook_into :webmock
c.configure_rspec_metadata!
c.default_cassette_options = { :record => :once }
c.allow_http_connections_when_no_cassette = false
c.ignore_localhost = false
c.ignore_hosts 'codeclimate.com'
end
context '#vcr_test' do
it 'should not return nil' do
VCR.use_cassette('vcr_test') do
expect(vcr_test).to eq('')
end
end
end
vcr_test.yml
---
http_interactions:
- request:
method: get
uri: http://www.mocky.io/v2/562e9e7f1100001236933b4b
body:
encoding: US-ASCII
string: ""
headers:
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
- "*/*"
User-Agent:
- Ruby
response:
status:
code: 200
message: OK
headers:
Server:
- Cowboy
Connection:
- close
Content-Type:
- application/json; charset=utf-8
Date:
- Mon, 26 Oct 2015 21:52:19 GMT
Via:
- 1.1 vegur
body:
encoding: UTF-8
string: ""
http_version:
recorded_at: Mon, 26 Oct 2015 21:52:19 GMT
recorded_with: VCR 2.9.3
перед записью кассеты
$ rspec test_spec.rb
Finished in 0.3623 seconds (files took 0.44012 seconds to load)
1 example, 0 failures
после записи кассеты
$ rspec test_spec.rb
Failures:
1) #vcr_test should not return nil
Failure/Error: expect(vcr_test).to eq('')
expected: ""
got: nil
(compared using ==)
# ./test_spec.rb:28:in `block (3 levels) in <top (required)>'
# ./test_spec.rb:27:in `block (2 levels) in <top (required)>'
Finished in 0.03411 seconds (files took 0.32761 seconds to load)
1 example, 1 failure
Failed examples:
rspec ./test_spec.rb:26 # #vcr_test should not return nil
Как мне получить видеомагнитофон, чтобы дублировать фактический ответ для пустого тела?