1 | const { AbortController, AbortSignal } = require('./AbortController')
|
2 |
|
3 | function flushInstantTimeouts () {
|
4 | return new Promise(resolve => setTimeout(resolve, 0))
|
5 | }
|
6 |
|
7 | describe('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 | })
|