UNPKG

1.55 kBJavaScriptView Raw
1const { AbortController, AbortSignal } = require('./AbortController')
2
3function flushInstantTimeouts () {
4 return new Promise(resolve => setTimeout(resolve, 0))
5}
6
7describe('AbortController', () => {
8 it('has the expected shape', () => {
9 const controller = new AbortController()
10 expect(typeof controller.abort).toBe('function')
11 expect(controller.signal).toBeInstanceOf(AbortSignal)
12 })
13
14 it('emits "abort" when abort() is called', async () => {
15 const controller = new AbortController()
16 const callback = jest.fn()
17
18 controller.signal.addEventListener('abort', callback)
19 controller.abort()
20
21 await flushInstantTimeouts()
22
23 expect(callback).toHaveBeenCalled()
24 expect(callback.mock.calls[0][0]).toBeInstanceOf(Event)
25 })
26
27 it('add and remove events', async () => {
28 const controller = new AbortController()
29 const callback = jest.fn()
30 const callback2 = jest.fn()
31
32 controller.signal.addEventListener('abort', callback)
33 controller.signal.addEventListener('abort', callback2)
34 controller.signal.removeEventListener('abort', callback)
35 controller.abort()
36
37 await flushInstantTimeouts()
38
39 expect(callback2).toHaveBeenCalled()
40 expect(callback2.mock.calls[0][0]).toBeInstanceOf(Event)
41 expect(callback).not.toHaveBeenCalled()
42 })
43
44 it('sets `signal.aborted` property when abort() is called', () => {
45 const controller = new AbortController()
46
47 expect(controller.signal.aborted).toBe(false)
48 controller.abort()
49 expect(controller.signal.aborted).toBe(true)
50 })
51})