From 2187156aa2ede6aee9c39b7025b30e7c69c30a67 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Thu, 7 Sep 2023 12:08:01 +0200 Subject: [PATCH] fix: remove "NetworkError" in favor of "HttpResponse.error" --- .../start/createRequestListener.ts | 12 ------------ .../start/utils/createMessageChannel.ts | 1 - src/core/NetworkError.ts | 17 ----------------- src/core/index.ts | 1 - src/mockServiceWorker.js | 18 ------------------ .../msw-api/res/network-error.mocks.ts | 4 ++-- .../scenarios/errors/network-error.mocks.ts | 4 ++-- .../scenarios/errors/network-error.test.ts | 10 ---------- .../msw-api/res/network-error.node.test.ts | 19 ++++++++++--------- 9 files changed, 14 insertions(+), 72 deletions(-) delete mode 100644 src/core/NetworkError.ts diff --git a/src/browser/setupWorker/start/createRequestListener.ts b/src/browser/setupWorker/start/createRequestListener.ts index f82d3fe75..1fa973045 100644 --- a/src/browser/setupWorker/start/createRequestListener.ts +++ b/src/browser/setupWorker/start/createRequestListener.ts @@ -7,7 +7,6 @@ import { ServiceWorkerMessage, WorkerChannel, } from './utils/createMessageChannel' -import { NetworkError } from '~/core/NetworkError' import { parseWorkerRequest } from '../../utils/parseWorkerRequest' import { handleRequest } from '~/core/utils/handleRequest' import { RequiredDeep } from '~/core/typeUtils' @@ -70,17 +69,6 @@ export const createRequestListener = ( }, ) } catch (error) { - if (error instanceof NetworkError) { - // Treat emulated network error differently, - // as it is an intended exception in a request handler. - messageChannel.postMessage('NETWORK_ERROR', { - name: error.name, - message: error.message, - }) - - return - } - if (error instanceof Error) { devUtils.error( `Uncaught exception in the request handler for "%s %s": diff --git a/src/browser/setupWorker/start/utils/createMessageChannel.ts b/src/browser/setupWorker/start/utils/createMessageChannel.ts index 60b07741e..210a7c3d1 100644 --- a/src/browser/setupWorker/start/utils/createMessageChannel.ts +++ b/src/browser/setupWorker/start/utils/createMessageChannel.ts @@ -17,7 +17,6 @@ interface WorkerChannelEventsMap { transfer?: [ReadableStream], ] NOT_FOUND: [] - NETWORK_ERROR: [data: { name: string; message: string }] } export class WorkerChannel { diff --git a/src/core/NetworkError.ts b/src/core/NetworkError.ts deleted file mode 100644 index c169d738a..000000000 --- a/src/core/NetworkError.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * An error indicating network issues while - * processing a request. - * - * @example - * import { http, NetworkError } from 'msw' - * - * http.get('/user', () => { - * throw new NetworkError('Failed to fetch') - * }) - */ -export class NetworkError extends Error { - constructor(message: string) { - super(message) - this.name = 'NetworkError' - } -} diff --git a/src/core/index.ts b/src/core/index.ts index 799f6e353..9deaa86d5 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -46,7 +46,6 @@ export * from './HttpResponse' export * from './delay' export { bypass } from './bypass' export { passthrough } from './passthrough' -export { NetworkError } from './NetworkError' // Validate environmental globals before executing any code. // This ensures that the library gives user-friendly errors diff --git a/src/mockServiceWorker.js b/src/mockServiceWorker.js index 214bc4426..a0634ad6d 100644 --- a/src/mockServiceWorker.js +++ b/src/mockServiceWorker.js @@ -112,15 +112,6 @@ self.addEventListener('fetch', function (event) { event.respondWith( handleRequest(event, requestId).catch((error) => { - if (error.name === 'NetworkError') { - console.warn( - '[MSW] Successfully emulated a network error for the "%s %s" request.', - request.method, - request.url, - ) - return - } - // At this point, any exception indicates an issue with the original request/response. console.error( `\ @@ -270,15 +261,6 @@ async function getResponse(event, client, requestId) { case 'MOCK_NOT_FOUND': { return passthrough() } - - case 'NETWORK_ERROR': { - const { name, message } = clientMessage.data - const networkError = new Error(message) - networkError.name = name - - // Rejecting a "respondWith" promise emulates a network error. - throw networkError - } } return passthrough() diff --git a/test/browser/msw-api/res/network-error.mocks.ts b/test/browser/msw-api/res/network-error.mocks.ts index 2c6f3cfaa..b7eaa41db 100644 --- a/test/browser/msw-api/res/network-error.mocks.ts +++ b/test/browser/msw-api/res/network-error.mocks.ts @@ -1,9 +1,9 @@ -import { http, NetworkError } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( http.get('/user', () => { - throw new NetworkError('Custom network error message') + return HttpResponse.error() }), ) diff --git a/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts b/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts index 2c6f3cfaa..b7eaa41db 100644 --- a/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts +++ b/test/browser/msw-api/setup-worker/scenarios/errors/network-error.mocks.ts @@ -1,9 +1,9 @@ -import { http, NetworkError } from 'msw' +import { http, HttpResponse } from 'msw' import { setupWorker } from 'msw/browser' const worker = setupWorker( http.get('/user', () => { - throw new NetworkError('Custom network error message') + return HttpResponse.error() }), ) diff --git a/test/browser/msw-api/setup-worker/scenarios/errors/network-error.test.ts b/test/browser/msw-api/setup-worker/scenarios/errors/network-error.test.ts index bec2179e6..8e1f43aa6 100644 --- a/test/browser/msw-api/setup-worker/scenarios/errors/network-error.test.ts +++ b/test/browser/msw-api/setup-worker/scenarios/errors/network-error.test.ts @@ -23,7 +23,6 @@ test('propagates a mocked network error', async ({ spyOnConsole, fetch, page, - waitFor, makeUrl, }) => { const consoleSpy = spyOnConsole() @@ -41,15 +40,6 @@ test('propagates a mocked network error', async ({ ]), ) - // Expect a notification warning from the library. - await waitFor(async () => { - expect(workerConsole.messages.get('warn')).toEqual( - expect.arrayContaining([ - `[MSW] Successfully emulated a network error for the "GET ${endpointUrl}" request.`, - ]), - ) - }) - // The worker must not produce any errors. expect(workerConsole.messages.get('error')).toBeUndefined() }) diff --git a/test/node/msw-api/res/network-error.node.test.ts b/test/node/msw-api/res/network-error.node.test.ts index c09c35323..6d93c06bb 100644 --- a/test/node/msw-api/res/network-error.node.test.ts +++ b/test/node/msw-api/res/network-error.node.test.ts @@ -2,22 +2,23 @@ * @jest-environment node */ import fetch from 'node-fetch' -import { http, NetworkError } from 'msw' +import { http, HttpResponse } from 'msw' import { setupServer } from 'msw/node' -const server = setupServer() +const server = setupServer( + http.get('http://example.com/user', () => { + return HttpResponse.error() + }), +) beforeAll(() => server.listen()) afterAll(() => server.close()) test('throws a network error when used with fetch', async () => { - server.use( - http.get('http://test.io/user', () => { - throw new NetworkError('Custom network error message') - }), - ) + const res = await fetch('http://example.com/user') + console.log(res.ok, res.status, res.statusText, res.type) - await expect(fetch('http://test.io/user')).rejects.toThrow( - 'Custom network error message', + await expect(fetch('http://example.com/user')).rejects.toThrow( + 'Failed to fetch', ) })