Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 19e5609

Browse files
authored
Merge pull request #2715 from cdr/add-tests-emitter
feat(testing): add unit tests for emitter
2 parents 74d2652 + 325a1d8 commit 19e5609

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

‎test/emitter.test.ts‎

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// Note: we need to import logger from the root
2+
// because this is the logger used in logError in ../src/common/util
3+
import { logger } from "../node_modules/@coder/logger"
4+
import { Emitter } from "../src/common/emitter"
5+
6+
describe("Emitter", () => {
7+
let spy: jest.SpyInstance
8+
9+
beforeEach(() => {
10+
spy = jest.spyOn(logger, "error")
11+
})
12+
13+
afterEach(() => {
14+
jest.clearAllMocks()
15+
})
16+
17+
afterAll(() => {
18+
jest.restoreAllMocks()
19+
})
20+
21+
it("should run the correct callbacks", async () => {
22+
const HELLO_WORLD = "HELLO_WORLD"
23+
const GOODBYE_WORLD = "GOODBYE_WORLD"
24+
const mockCallback = jest.fn(() => "Mock function called")
25+
const mockSecondCallback = jest.fn(() => undefined)
26+
27+
const emitter = new Emitter<{ event: string; callback: () => void }>()
28+
29+
const onHelloWorld = ({ event, callback }: { event: string; callback: () => void }): void => {
30+
if (event === HELLO_WORLD) {
31+
callback()
32+
}
33+
}
34+
35+
const onGoodbyeWorld = ({ event, callback }: { event: string; callback: () => void }): void => {
36+
if (event === GOODBYE_WORLD) {
37+
callback()
38+
}
39+
}
40+
41+
// Register the onHelloWorld listener
42+
// and the onGoodbyeWorld
43+
emitter.event(onHelloWorld)
44+
emitter.event(onGoodbyeWorld)
45+
46+
await emitter.emit({ event: HELLO_WORLD, callback: mockCallback })
47+
48+
// Double-check that our callback is called only once
49+
expect(mockCallback).toHaveBeenCalled()
50+
expect(mockCallback).toHaveBeenCalledTimes(1)
51+
52+
await emitter.emit({ event: GOODBYE_WORLD, callback: mockSecondCallback })
53+
54+
// Check that it works with multiple listeners
55+
expect(mockSecondCallback).toHaveBeenCalled()
56+
expect(mockSecondCallback).toHaveBeenCalledTimes(1)
57+
58+
// Dispose of all the listeners
59+
emitter.dispose()
60+
})
61+
62+
it("should log an error if something goes wrong", async () => {
63+
const HELLO_WORLD = "HELLO_WORLD"
64+
const mockCallback = jest.fn(() => "Mock function called")
65+
const message = "You don't have access to that folder."
66+
67+
const emitter = new Emitter<{ event: string; callback: () => void }>()
68+
69+
const onHelloWorld = ({ event, callback }: { event: string; callback: () => void }): void => {
70+
if (event === HELLO_WORLD) {
71+
callback()
72+
throw new Error(message)
73+
}
74+
}
75+
76+
emitter.event(onHelloWorld)
77+
78+
await emitter.emit({ event: HELLO_WORLD, callback: mockCallback })
79+
80+
// Check that error was called
81+
expect(spy).toHaveBeenCalled()
82+
expect(spy).toHaveBeenCalledTimes(1)
83+
expect(spy).toHaveBeenCalledWith(message)
84+
})
85+
})

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /