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,但身体为空。

有什么想法吗?

解决方法

您遵循的语法适用于custom status message。您正在寻找的是this

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\"}"