Skip to content

Commit

Permalink
fix: remove "NetworkError" in favor of "HttpResponse.error"
Browse files Browse the repository at this point in the history
  • Loading branch information
kettanaito committed Sep 7, 2023
1 parent 0898517 commit 2187156
Show file tree
Hide file tree
Showing 9 changed files with 14 additions and 72 deletions.
12 changes: 0 additions & 12 deletions src/browser/setupWorker/start/createRequestListener.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -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":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ interface WorkerChannelEventsMap {
transfer?: [ReadableStream<Uint8Array>],
]
NOT_FOUND: []
NETWORK_ERROR: [data: { name: string; message: string }]
}

export class WorkerChannel {
Expand Down
17 changes: 0 additions & 17 deletions src/core/NetworkError.ts

This file was deleted.

1 change: 0 additions & 1 deletion src/core/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
18 changes: 0 additions & 18 deletions src/mockServiceWorker.js
Original file line number Diff line number Diff line change
Expand Up @@ -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(
`\
Expand Down Expand Up @@ -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()
Expand Down
4 changes: 2 additions & 2 deletions test/browser/msw-api/res/network-error.mocks.ts
Original file line number Diff line number Diff line change
@@ -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()
}),
)

Expand Down
Original file line number Diff line number Diff line change
@@ -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()
}),
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ test('propagates a mocked network error', async ({
spyOnConsole,
fetch,
page,
waitFor,
makeUrl,
}) => {
const consoleSpy = spyOnConsole()
Expand All @@ -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()
})
Expand Down
19 changes: 10 additions & 9 deletions test/node/msw-api/res/network-error.node.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
)
})

0 comments on commit 2187156

Please sign in to comment.