UNPKG

2.29 kBPlain TextView Raw
1import { SocketIoChannel } from '../../src/channel';
2
3describe('SocketIoChannel', () => {
4 let channel;
5 let socket;
6
7 beforeEach(() => {
8 const channelName = 'some.channel';
9 let listeners = [];
10 socket = {
11 emit: (event, data) => listeners.filter(([e]) => e === event).forEach(([, fn]) => fn(channelName, data)),
12 on: (event, fn) => listeners.push([event, fn]),
13 removeListener: (event, fn) => {
14 listeners = listeners.filter(([e, f]) => (!fn ? e !== event : e !== event || f !== fn));
15 },
16 };
17
18 channel = new SocketIoChannel(socket, channelName, {
19 namespace: false,
20 });
21 });
22
23 test('triggers all listeners for an event', () => {
24 const l1 = jest.fn();
25 const l2 = jest.fn();
26 const l3 = jest.fn();
27 channel.listen('MyEvent', l1);
28 channel.listen('MyEvent', l2);
29 channel.listen('MyOtherEvent', l3);
30
31 socket.emit('MyEvent', {});
32
33 expect(l1).toBeCalled();
34 expect(l2).toBeCalled();
35 expect(l3).not.toBeCalled();
36
37 socket.emit('MyOtherEvent', {});
38
39 expect(l3).toBeCalled();
40 });
41
42 test('can remove a listener for an event', () => {
43 const l1 = jest.fn();
44 const l2 = jest.fn();
45 const l3 = jest.fn();
46 channel.listen('MyEvent', l1);
47 channel.listen('MyEvent', l2);
48 channel.listen('MyOtherEvent', l3);
49
50 channel.stopListening('MyEvent', l1);
51
52 socket.emit('MyEvent', {});
53
54 expect(l1).not.toBeCalled();
55 expect(l2).toBeCalled();
56 expect(l3).not.toBeCalled();
57
58 socket.emit('MyOtherEvent', {});
59
60 expect(l3).toBeCalled();
61 });
62
63 test('can remove all listeners for an event', () => {
64 const l1 = jest.fn();
65 const l2 = jest.fn();
66 const l3 = jest.fn();
67 channel.listen('MyEvent', l1);
68 channel.listen('MyEvent', l2);
69 channel.listen('MyOtherEvent', l3);
70
71 channel.stopListening('MyEvent');
72
73 socket.emit('MyEvent', {});
74
75 expect(l1).not.toBeCalled();
76 expect(l2).not.toBeCalled();
77 expect(l3).not.toBeCalled();
78
79 socket.emit('MyOtherEvent', {});
80
81 expect(l3).toBeCalled();
82 });
83});