diff --git a/src/setupWorker/start/createFallbackRequestListener.ts b/src/setupWorker/start/createFallbackRequestListener.ts index 1ea85f88e..db7eb76eb 100644 --- a/src/setupWorker/start/createFallbackRequestListener.ts +++ b/src/setupWorker/start/createFallbackRequestListener.ts @@ -48,10 +48,10 @@ export function createFallbackRequestListener( }, onMockedResponse(_, { handler, publicRequest, parsedRequest }) { if (!options.quiet) { - context.emitter.once('response:mocked', (response) => { + context.emitter.once('response:mocked', async (response) => { handler.log( publicRequest, - serializeResponse(response), + await serializeResponse(response), parsedRequest, ) }) diff --git a/src/setupWorker/start/createRequestListener.ts b/src/setupWorker/start/createRequestListener.ts index 4b62fe891..1b4cfa184 100644 --- a/src/setupWorker/start/createRequestListener.ts +++ b/src/setupWorker/start/createRequestListener.ts @@ -73,10 +73,10 @@ export const createRequestListener = ( ) if (!options.quiet) { - context.emitter.once('response:mocked', (response) => { + context.emitter.once('response:mocked', async (response) => { handler.log( publicRequest, - serializeResponse(response), + await serializeResponse(response), parsedRequest, ) }) diff --git a/src/utils/logging/prepareResponse.test.ts b/src/utils/logging/prepareResponse.test.ts index 7fc3e156b..c00821873 100644 --- a/src/utils/logging/prepareResponse.test.ts +++ b/src/utils/logging/prepareResponse.test.ts @@ -1,7 +1,7 @@ import { prepareResponse } from './prepareResponse' -test('parses a JSON response body given a "Content-Type:*/json" header', () => { - const res = prepareResponse({ +test('parses a JSON response body given a "Content-Type:*/json" header', async () => { + const res = await prepareResponse({ status: 200, statusText: 'OK', headers: { diff --git a/src/utils/logging/prepareResponse.ts b/src/utils/logging/prepareResponse.ts index 6f09bce88..1fb206094 100644 --- a/src/utils/logging/prepareResponse.ts +++ b/src/utils/logging/prepareResponse.ts @@ -5,12 +5,14 @@ import { parseBody } from '../request/parseBody' /** * Formats a mocked response for introspection in the browser's console. */ -export function prepareResponse(res: SerializedResponse) { +export function prepareResponse(res: SerializedResponse) { const responseHeaders = objectToHeaders(res.headers) + // Parse a response JSON body for preview in the logs + const parsedBody = parseBody(res.body, responseHeaders) + return { ...res, - // Parse a response JSON body for preview in the logs - body: parseBody(res.body, responseHeaders), + body: parsedBody, } } diff --git a/src/utils/logging/serializeResponse.ts b/src/utils/logging/serializeResponse.ts index 289e4eb8a..24230d1db 100644 --- a/src/utils/logging/serializeResponse.ts +++ b/src/utils/logging/serializeResponse.ts @@ -1,11 +1,16 @@ import { flattenHeadersObject, headersToObject } from 'headers-polyfill' import type { SerializedResponse } from '../../setupWorker/glossary' -export function serializeResponse(source: Response): SerializedResponse { +export async function serializeResponse( + response: Response, +): Promise> { return { - status: source.status, - statusText: source.statusText, - headers: flattenHeadersObject(headersToObject(source.headers)), - body: source.body, + status: response.status, + statusText: response.statusText, + headers: flattenHeadersObject(headersToObject(response.headers)), + // Serialize the response body to a string + // so it's easier to process further down the chain in "prepareResponse" (browser-only) + // and "parseBody" (ambiguous). + body: await response.text(), } }