From e2054cd65b0bec5df4d4ecfad04b3f0136315237 Mon Sep 17 00:00:00 2001 From: Szymon Marczak <36894700+szmarczak@users.noreply.github.com> Date: Wed, 24 Apr 2019 11:33:05 +0200 Subject: [PATCH] Fix parsing response when using `afterResponse` hook (#775) --- source/as-promise.ts | 4 +++- source/request-as-event-emitter.ts | 1 + test/hooks.ts | 21 +++++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/source/as-promise.ts b/source/as-promise.ts index 305aa6d4f..a86e25d2f 100644 --- a/source/as-promise.ts +++ b/source/as-promise.ts @@ -56,7 +56,9 @@ export default function asPromise(options: Options) { updatedOptions = reNormalizeArguments(mergeOptions(options, { ...updatedOptions, retry: 0, - throwHttpErrors: false + throwHttpErrors: false, + responseType: 'text', + resolveBodyOnly: false })); // Remove any further hooks for that request, because we we'll call them anyway. diff --git a/source/request-as-event-emitter.ts b/source/request-as-event-emitter.ts index 0a5c4dcd3..da8e759b6 100644 --- a/source/request-as-event-emitter.ts +++ b/source/request-as-event-emitter.ts @@ -151,6 +151,7 @@ export default (options, input?: TransformStream) => { const redirectOptions = { ...options, port: null, + auth: null, ...urlToOptions(redirectURL) }; diff --git a/test/hooks.ts b/test/hooks.ts index 0c0b1d55c..e3a65ec65 100644 --- a/test/hooks.ts +++ b/test/hooks.ts @@ -477,3 +477,24 @@ test('beforeError allows modifications', async t => { } }), errorString2); }); + +test('does not break on `afterResponse` hook with JSON mode', withServer, async (t, server, got) => { + server.get('/foobar', echoHeaders); + + await t.notThrowsAsync(got('/', { + hooks: { + afterResponse: [ + (response, retryWithMergedOptions) => { + if (response.statusCode === 404) { + return retryWithMergedOptions({ + path: '/foobar' + }); + } + + return response; + } + ] + }, + responseType: 'json' + })); +});