问题描述
我正在使用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\"}"