diff --git a/lib/webmock/http_lib_adapters/net_http.rb b/lib/webmock/http_lib_adapters/net_http.rb index 96d108c83..85a987af3 100644 --- a/lib/webmock/http_lib_adapters/net_http.rb +++ b/lib/webmock/http_lib_adapters/net_http.rb @@ -128,7 +128,10 @@ def start_with_conditional_connect(&block) def build_net_http_response(webmock_response, &block) response = Net::HTTPResponse.send(:response_class, webmock_response.status[0].to_s).new("1.0", webmock_response.status[0].to_s, webmock_response.status[1]) - response.instance_variable_set(:@body, webmock_response.body) + body = webmock_response.body + body = nil if body.to_s == '' + + response.instance_variable_set(:@body, body) webmock_response.headers.to_a.each do |name, values| values = [values] unless values.is_a?(Array) values.each do |value| diff --git a/spec/acceptance/shared/complex_cross_concern_behaviors.rb b/spec/acceptance/shared/complex_cross_concern_behaviors.rb index 429fc595e..d16a66980 100644 --- a/spec/acceptance/shared/complex_cross_concern_behaviors.rb +++ b/spec/acceptance/shared/complex_cross_concern_behaviors.rb @@ -17,5 +17,18 @@ played_back_response.headers.keys.should include('Set-Cookie') played_back_response.should == real_response end + + let(:no_content_url) { 'http://httpstat.us/204' } + [nil, ''].each do |stub_val| + it "returns the same value (nil or "") for a request stubbed as #{stub_val.inspect} that a real empty response has" do + WebMock.allow_net_connect! + + real_response = http_request(:get, no_content_url) + stub_request(:get, no_content_url).to_return(:status => 204, :body => stub_val) + stubbed_response = http_request(:get, no_content_url) + + stubbed_response.body.should eq(real_response.body) + end + end end