|
1 |
| -import { describe, it, expect, vitest, beforeAll, afterAll } from 'vitest' |
| 1 | +import { describe, it, expect, vi, beforeAll, afterAll } from 'vitest' |
2 | 2 | import WSGO from '../src/index'
|
3 | 3 | import ws from 'ws'
|
| 4 | +import { createMockWSServer } from './utils' |
4 | 5 |
|
5 | 6 | describe('subscribe', () => {
|
6 |
| - let port = 0 |
| 7 | + const date = new Date(2000, 1, 1) |
| 8 | + |
| 9 | + let port: number = 0 |
7 | 10 | let server: ws.Server
|
8 | 11 |
|
9 | 12 | beforeAll(() => {
|
10 |
| - server = new ws.WebSocketServer({ port }) |
11 |
| - |
12 |
| - server.on('connection', (ws) => { |
13 |
| - ws.on('message', (data, isBinary) => { |
14 |
| - const message = isBinary ? data : data.toString() |
15 |
| - ws.send(message) |
16 |
| - }) |
17 |
| - }) |
| 13 | + const mockWSServer = createMockWSServer(port) |
18 | 14 |
|
19 |
| - port = (server.address() as ws.AddressInfo).port |
| 15 | + server = mockWSServer.server |
| 16 | + port = mockWSServer.port |
20 | 17 | })
|
21 | 18 |
|
22 | 19 | afterAll(() => {
|
23 | 20 | server.close()
|
24 | 21 | })
|
25 | 22 |
|
26 | 23 | it('should subscribe to event', async () => {
|
| 24 | + const eventName = 'eventName' |
| 25 | + const eventData = { text: 'Hello World!' } |
| 26 | + |
27 | 27 | let event: any
|
28 | 28 |
|
29 | 29 | // Arrange
|
30 | 30 | const wsgo = WSGO(`ws://localhost:${port}`)
|
31 |
| - await vitest.waitFor(() => { |
| 31 | + await vi.waitFor(() => { |
| 32 | + vi.setSystemTime(date) |
32 | 33 | if (wsgo.ws?.readyState !== window.WebSocket.OPEN) {
|
33 | 34 | throw new Error()
|
34 | 35 | }
|
35 | 36 | })
|
36 | 37 |
|
37 | 38 | // Act
|
38 |
| - wsgo.subscribe('eventName', (ev) => (event = ev)) |
39 |
| - wsgo.send('eventName', { text: 'Hello World!' }) |
40 |
| - await vitest.waitFor(() => { |
| 39 | + wsgo.subscribe(eventName, (ev) => (event = ev)) |
| 40 | + wsgo.send(eventName, eventData) |
| 41 | + await vi.waitFor(() => { |
| 42 | + vi.setSystemTime(date) |
41 | 43 | if (event === undefined) {
|
42 | 44 | throw new Error()
|
43 | 45 | }
|
44 | 46 | })
|
45 | 47 | wsgo.close()
|
46 | 48 |
|
47 | 49 | // Assert
|
48 |
| - expect(event).toStrictEqual({ event: 'eventName', data: { text: 'Hello World!' } }) |
| 50 | + expect(event).toStrictEqual({ event: eventName, data: eventData, timeSended: Date.now(), timeReceived: Date.now() }) |
49 | 51 | })
|
50 | 52 |
|
51 | 53 | it.todo('should work once', () => {})
|
|
0 commit comments