webmock to_return со статусом 400 и телом

Я пишу тесты с помощью webmock, мне нужно смоделировать удаленный API, чтобы вернуть статус 400 с содержимым тела,

если я просто меняю статус с 200 на 400, с телом, статус, который я получаю, становится 200.

      let(:stub_result) { { result: 'failed', reason: 'blabla' }.to_json }
      let!(:quote_stub) {
        stub_request(:post, 'http://example.com/rest')
          .to_return(status: 400, body: stub_result)
      }

если я буду следовать руководству и делать:

stub_request(:post, 'http://example.com/rest')
          .to_return(status: [400, body: stub_result])

Получаю статус 400, но тело пустое.

Любые идеи?


person Don Giulio    schedule 27.08.2020    source источник


Ответы (1)


Вы используете синтаксис для настраиваемого сообщения о статусе. Вам нужен это.

stub_result = { result: 'failed', reason: 'blabla' }.to_json
stub_request(:post, 'http://example.com/rest').to_return(body: stub_result, status: 400)

res = Net::HTTP.start('example.com') do |http|
  req = Net::HTTP::Post.new('/rest')
  http.request(req)
end

> res
=> #<Net::HTTPBadRequest 400  readbody=true>


> res.body
=> "{\"result\":\"failed\",\"reason\":\"blabla\"}"
person Nitish Parkar    schedule 28.08.2020