mirror of
https://github.com/hanzoai/msw.git
synced 2026-09-24 17:00:34 +00:00
52 lines
1.2 KiB
TypeScript
52 lines
1.2 KiB
TypeScript
// @vitest-environment node-websocket
|
|
import { ws } from 'msw'
|
|
import { setupServer } from 'msw/node'
|
|
|
|
const server = setupServer()
|
|
|
|
beforeAll(() => {
|
|
server.listen()
|
|
})
|
|
|
|
afterEach(() => {
|
|
server.resetHandlers()
|
|
})
|
|
|
|
afterAll(() => {
|
|
server.close()
|
|
})
|
|
|
|
it('intercepts a WebSocket connection via an HTTP request upgrade', async () => {
|
|
const api = ws.link('wss://localhost/ws')
|
|
|
|
const connectionListener = vi.fn()
|
|
server.use(api.addEventListener('connection', connectionListener))
|
|
|
|
const upgradeResponse = await fetch('https://localhost/ws', {
|
|
headers: {
|
|
upgrade: 'websocket',
|
|
connection: 'upgrade',
|
|
'sec-websocket-key': 'abc-123',
|
|
},
|
|
})
|
|
|
|
expect.soft(upgradeResponse.status).toBe(101)
|
|
expect.soft(upgradeResponse.headers.get('upgrade')).toBe('websocket')
|
|
expect.soft(upgradeResponse.headers.get('connection')).toBe('upgrade')
|
|
expect
|
|
.soft(upgradeResponse.headers.get('sec-websocket-accept'))
|
|
.toBe('apA7rfK383HiPlWh1+EOR3vC9ww=')
|
|
|
|
await expect
|
|
.poll(() => connectionListener)
|
|
.toHaveBeenCalledExactlyOnceWith(
|
|
expect.objectContaining({
|
|
client: expect.objectContaining({
|
|
socket: expect.objectContaining({
|
|
url: 'wss://localhost/ws',
|
|
}),
|
|
}),
|
|
}),
|
|
)
|
|
})
|