-
Notifications
You must be signed in to change notification settings - Fork 0
/
mocks.test.js
69 lines (53 loc) · 3.72 KB
/
mocks.test.js
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
let originFn
let obj
let normalMockFn
let spyOnMockFn
beforeEach(() => {
originFn = () => '原函数返回值'
obj = {
method: originFn
}
// 通过 jest.fn() 产生的 mock 函数,且带有函数定义
normalMockFn = jest.fn(() => '有函数定义')
// 通过 jest.spyOn() 产生的 mock 函数,且带有函数定义
spyOnMockFn = jest.spyOn(obj, 'method').mockImplementation(() => 'spyOn 后产生的 mock 函数的返回值')
// 分别调用一次这俩函数,让它们产生调用数据
normalMockFn()
obj.method()
})
test('mockFn.mockReset() 对 jest.fn() 和 jest.spyOn() 产生的 mock 函数的影响', () => {
normalMockFn.mockReset()
obj.method.mockReset()
expect(normalMockFn).toHaveBeenCalledTimes(0) // mockReset() 清除了 jest.fn() 产生的 mock 函数的调用数据
expect(normalMockFn()).toBeUndefined() // mockReset() 清除了 jest.fn() 产生的 mock 函数的函数定义
expect(obj.method === originFn).toBe(false) // mockReset() 没有把 obj.method 还原为原函数
expect(obj.method).toHaveBeenCalledTimes(0) // mockReset() **清除了** spyOn 产生的 mock 函数的调用数据
expect(obj.method()).toBeUndefined() // mockReset() **清除了** spyOn 产生的 mock 函数的函数定义
})
test('jest.resetAllMocks() 对 jest.fn() 和 jest.spyOn() 产生的 mock 函数的影响', () => {
jest.resetAllMocks()
expect(normalMockFn).toHaveBeenCalledTimes(0) // resetAllMocks() 清除了 jest.fn() 产生的 mock 函数的调用数据
expect(normalMockFn()).toBeUndefined() // resetAllMocks() 清除了 jest.fn() 产生的 mock 函数的函数定义
expect(obj.method === originFn).toBe(false) // resetAllMocks() 没有把 obj.method 还原为原函数
expect(obj.method).toHaveBeenCalledTimes(0) // resetAllMocks() **清除了** spyOn 产生的 mock 函数的调用数据
expect(obj.method()).toBeUndefined() // resetAllMocks() **清除了** spyOn 产生的 mock 函数的函数定义
})
test('mockFn.mockRestore() 对 jest.fn() 和 jest.spyOn() 产生的 mock 函数的影响', () => {
normalMockFn.mockRestore()
obj.method.mockRestore()
expect(normalMockFn).toHaveBeenCalledTimes(0) // mockRestore() 清除了 jest.fn() 产生的 mock 函数的调用数据
expect(normalMockFn()).toBeUndefined() // mockRestore() 清除了 jest.fn() 产生的 mock 函数的函数定义
expect(obj.method === originFn).toBe(true) // mockRestore() 将 obj.method 还原为了原函数
// 由于 obj.method 已经被还原为原函数,所以下方只能用变量来引用 spyOn 产生的 mock 函数
expect(spyOnMockFn).toHaveBeenCalledTimes(0) // mockRestore() 清除了 spyOn 产生的 mock 函数的调用数据
expect(spyOnMockFn()).toBeUndefined() // mockRestore() 清除了 spyOn 产生的 mock 函数的函数定义
})
test('jest.restoreAllMocks() 对 jest.fn() 和 jest.spyOn() 产生的 mock 函数的影响', () => {
jest.restoreAllMocks()
expect(normalMockFn).toHaveBeenCalledTimes(1) // restoreAllMocks() **没有清除** jest.fn() 产生的 mock 函数的调用数据
expect(normalMockFn()).toBe('有函数定义') // restoreAllMocks() **没有清除** jest.fn() 产生的 mock 函数的函数定义
expect(obj.method === originFn).toBe(true) // restoreAllMocks() 将 obj.method 还原为了原函数
// 由于 obj.method 已经被还原为原函数,所以下方只能用变量来引用 spyOn 产生的 mock 函数
expect(spyOnMockFn).toHaveBeenCalledTimes(1) // resetAllMocks() **没有清除** spyOn 产生的 mock 函数的调用数据
expect(spyOnMockFn()).toBe('spyOn 后产生的 mock 函数的返回值') // resetAllMocks() **没有清除** spyOn 产生的 mock 函数的函数定义
})