diff --git a/integration_tests/webmock_test.rb b/integration_tests/webmock_test.rb index 0f5eb59d..2b6c68fd 100644 --- a/integration_tests/webmock_test.rb +++ b/integration_tests/webmock_test.rb @@ -225,6 +225,21 @@ class WebmockTest < Minitest::Test assert_requested(redirect_request) end + def test_webmock_with_stream_plugin_each + request = stub_request(:get, MOCK_URL_HTTP).to_return(body: "body") + + body = "".b + response = HTTPX.plugin(:stream).get(MOCK_URL_HTTP, stream: true) + response.each do |chunk| + next if (300..399).cover?(response.status) + + body << chunk + end + + assert_equal("body", body) + assert_requested(request) + end + def test_webmock_with_stream_plugin_each_line session = HTTPX.plugin(:stream) request = stub_request(:get, MOCK_URL_HTTP).to_return(body: "First line\nSecond line") diff --git a/lib/httpx/adapters/webmock.rb b/lib/httpx/adapters/webmock.rb index 24a5bf51..8b873996 100644 --- a/lib/httpx/adapters/webmock.rb +++ b/lib/httpx/adapters/webmock.rb @@ -38,12 +38,10 @@ module WebMock return build_error_response(request, webmock_response.exception) if webmock_response.exception - response = request.options.response_class.new(request, - webmock_response.status[0], - "2.0", - webmock_response.headers) - response << webmock_response.body.dup - response + request.options.response_class.new(request, + webmock_response.status[0], + "2.0", + webmock_response.headers) end def build_error_response(request, exception) @@ -90,6 +88,7 @@ module WebMock log { "mocking #{request.uri} with #{mock_response.inspect}" } request.response = response request.emit(:response, response) + response << mock_response.body.dup unless response.is_a?(HTTPX::ErrorResponse) elsif WebMock.net_connect_allowed?(request_signature.uri) if WebMock::CallbackRegistry.any_callbacks? request.on(:response) do |resp|