Rspec webmock以400状态返回,同时返回一个主体

Rspec webmock以400状态返回,同时返回一个主体,rspec,rspec-rails,webmock,Rspec,Rspec Rails,Webmock,我正在使用webmock编写测试,我需要模拟远程api以返回400状态,其中包含正文内容 如果我只是将状态从200更改为400,有一个body,我收到的状态将变为200 let(:stub_result) { { result: 'failed', reason: 'blabla' }.to_json } let!(:quote_stub) { stub_request(:post, 'http://example.com/rest')

我正在使用webmock编写测试,我需要模拟远程api以返回400状态,其中包含正文内容

如果我只是将状态从200更改为400,有一个body,我收到的状态将变为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状态,但尸体是空的


有什么想法吗?

您所遵循的语法是用于。你要找的是

stub_result={result:'failed',原因:'blabla'}.to_json
存根请求(:post,'http://example.com/rest)。返回(正文:存根结果,状态:400)
res=Net::HTTP.start('example.com')do | HTTP|
req=Net::HTTP::Post.new(“/rest”)
请求(req)
结束
>res
=> #
>实体
=>“{\'result\':\'failed\',\'reason\':\'blabla\'}”
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\"}"