-
Notifications
You must be signed in to change notification settings - Fork 232
/
Copy pathcleanup.test.ts
67 lines (51 loc) · 1.54 KB
/
cleanup.test.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
import { useEffect } from 'react'
import { renderHook, cleanup } from '..'
describe('cleanup tests', () => {
test('should flush effects on cleanup', async () => {
let cleanupCalled = false
const hookWithCleanup = () => {
useEffect(() => {
return () => {
cleanupCalled = true
}
})
}
const { hydrate } = renderHook(() => hookWithCleanup())
hydrate()
await cleanup()
expect(cleanupCalled).toBe(true)
})
test('should cleanup all rendered hooks', async () => {
let cleanupCalled = [false, false]
const hookWithCleanup = (id: number) => {
useEffect(() => {
return () => {
cleanupCalled = cleanupCalled.map((_, i) => (i === id ? true : _))
}
})
}
const { hydrate: hydrate1 } = renderHook(() => hookWithCleanup(0))
const { hydrate: hydrate2 } = renderHook(() => hookWithCleanup(1))
hydrate1()
hydrate2()
await cleanup()
expect(cleanupCalled[0]).toBe(true)
expect(cleanupCalled[1]).toBe(true)
})
test('should only cleanup hydrated hooks', async () => {
let cleanupCalled = [false, false]
const hookWithCleanup = (id: number) => {
useEffect(() => {
return () => {
cleanupCalled = cleanupCalled.map((_, i) => (i === id ? true : _))
}
})
}
renderHook(() => hookWithCleanup(0))
const { hydrate } = renderHook(() => hookWithCleanup(1))
hydrate()
await cleanup()
expect(cleanupCalled[0]).toBe(false)
expect(cleanupCalled[1]).toBe(true)
})
})