Skip to content

Commit 8a84a05

Browse files
authored
test(ws): add unhandled exceptions test (#2656)
1 parent e0a4643 commit 8a84a05

1 file changed

Lines changed: 53 additions & 0 deletions

File tree

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// @vitest-environment node-websocket
2+
import { ws } from 'msw'
3+
import { setupServer } from 'msw/node'
4+
5+
const server = setupServer()
6+
const service = ws.link('ws://*')
7+
8+
beforeAll(() => {
9+
server.listen()
10+
vi.spyOn(console, 'error').mockImplementation(() => void 0)
11+
})
12+
13+
afterEach(() => {
14+
server.resetHandlers()
15+
vi.clearAllMocks()
16+
})
17+
18+
afterAll(() => {
19+
server.close()
20+
vi.restoreAllMocks()
21+
})
22+
23+
it('dispatches a WebSocket error event on handler exception', async () => {
24+
server.use(
25+
service.addEventListener('connection', () => {
26+
throw new Error('Handler exception')
27+
}),
28+
)
29+
30+
const socket = new WebSocket('ws://localhost:3000')
31+
32+
const closeListener = vi.fn()
33+
const errorListener = vi.fn()
34+
socket.onclose = closeListener
35+
socket.onerror = errorListener
36+
socket.onopen = () => {
37+
expect.fail('Must not open the WebSocket connection')
38+
}
39+
40+
await expect.poll(() => errorListener).toHaveBeenCalledOnce()
41+
expect(closeListener).toHaveBeenCalledOnce()
42+
expect(closeListener).toHaveBeenCalledWith(
43+
expect.objectContaining({
44+
code: 1011,
45+
reason: 'Handler exception',
46+
}),
47+
)
48+
expect(socket.readyState).toBe(WebSocket.CLOSED)
49+
50+
expect(console.error, 'Prints the error for the user').toHaveBeenCalledWith(
51+
new Error('Handler exception'),
52+
)
53+
})

0 commit comments

Comments
 (0)