forked from FirebaseExtended/firepad
-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathemitter.spec.ts
76 lines (65 loc) · 2.13 KB
/
emitter.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import {
EventType,
EventEmitter,
EventListenerType,
IEventEmitter,
IEvent,
} from "../src/emitter";
describe("Emitter", () => {
let event: EventType;
let emitter: IEventEmitter;
let eventListenerStub: EventListenerType<IEvent>;
beforeAll(() => {
event = "Some Event";
eventListenerStub = jest.fn<void, [IEvent]>();
});
beforeEach(() => {
emitter = new EventEmitter([event]);
});
afterEach(() => {
emitter.dispose();
jest.resetAllMocks();
});
describe("#on", () => {
it("should attach event listener to emitter for valid event", () => {
const fn = () => emitter.on(event, eventListenerStub);
expect(fn).not.toThrowError();
});
it("should throw error for invalid event", () => {
const otherEvent = "Some Other Event";
const fn = () => emitter.on(otherEvent, eventListenerStub);
expect(fn).toThrowError();
});
});
describe("#off", () => {
it("should detach event listener to emitter for valid event", () => {
const fn = () => emitter.off(event, eventListenerStub);
expect(fn).not.toThrowError();
});
it("should throw error for invalid event", () => {
const otherEvent = "Some Other Event";
const fn = () => emitter.off(otherEvent, eventListenerStub);
expect(fn).toThrowError();
});
});
describe("#trigger", () => {
it("should invoke event listener for given event", () => {
const eventAtrr = "Some Event Details";
emitter.on(event, eventListenerStub);
emitter.trigger(event, eventAtrr);
expect(eventListenerStub).toHaveBeenCalledWith(eventAtrr);
});
it("should not invoke event listener after detachment", () => {
const eventAtrr = "Some Event Details";
emitter.on(event, eventListenerStub);
emitter.off(event, eventListenerStub);
emitter.trigger(event, eventAtrr);
expect(eventListenerStub).not.toHaveBeenCalled();
});
it("should not throw error if no listener is attached", () => {
const eventAtrr = "Some Event Details";
const fn = () => emitter.trigger(event, eventAtrr);
expect(fn).not.toThrowError();
});
});
});