Skip to content

Commit 820b2d3

Browse files
committed
test(ws): add connection error test
1 parent 51924bd commit 820b2d3

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// @vitest-environment node-with-websocket
2+
import { vi, it, expect, beforeAll, afterEach, afterAll } from 'vitest'
3+
import { WebSocketInterceptor } from '../../../../src/interceptors/WebSocket'
4+
5+
const interceptor = new WebSocketInterceptor()
6+
7+
beforeAll(() => {
8+
interceptor.apply()
9+
})
10+
11+
afterEach(() => {
12+
interceptor.removeAllListeners()
13+
})
14+
15+
afterAll(() => {
16+
interceptor.dispose()
17+
})
18+
19+
it('simulates connection error by throwing inside the "connection" listener', async () => {
20+
interceptor.on('connection', () => {
21+
throw new Error('Mocked connection error')
22+
})
23+
24+
const socket = new WebSocket('wss://example.com')
25+
26+
const openListener = vi.fn()
27+
const closeListener = vi.fn()
28+
const errorListener = vi.fn()
29+
30+
socket.onopen = openListener
31+
socket.onerror = errorListener
32+
socket.onclose = closeListener
33+
34+
await vi.waitFor(() => {
35+
expect(errorListener).toHaveBeenCalledTimes(1)
36+
})
37+
38+
expect(openListener).not.toHaveBeenCalled()
39+
expect(closeListener).toHaveBeenCalledTimes(1)
40+
expect(closeListener).toHaveBeenCalledWith(
41+
expect.objectContaining({
42+
type: 'close',
43+
// Mark the closure as a server error.
44+
code: 1011,
45+
// Must include the error as the closure reason.
46+
reason: 'Mocked connection error',
47+
})
48+
)
49+
expect(socket.readyState).toBe(WebSocket.CLOSED)
50+
})

0 commit comments

Comments
 (0)