Skip to content

Commit 24f724b

Browse files
jest
1 parent 2fce180 commit 24f724b

20 files changed

+5994
-3
lines changed

13-自动化测试&mock数据/jest-test/06-hook.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export default class Counter {
99
this.number = 0
1010
}
1111
addOne () {
12-
this.number += 3
12+
this.number += 1
1313
}
1414
minusOne () {
1515
this.number -= 1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { runCallback, createObject, getData } from './07.mock'
1+
import { runCallback, createObject, getData } from './07-mock'
22
import axios from 'axios'
33

44
/**
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import axios from 'axios'
2+
3+
export const fetchData = () => {
4+
// '(function(){return 123})()'
5+
return axios.get('/api').then(res => res.data)
6+
}
7+
8+
export const getNumber = () => {
9+
return 123;
10+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
import { fetchData } from './08-mock2'
3+
4+
// 【1】mock axios 方案
5+
/*
6+
import Axios from 'axios'
7+
jest.mock('axios');
8+
test('测试 fetchData', () => {
9+
Axios.get.mockResolvedValue({
10+
data: '(function(){return 123})()'
11+
})
12+
return fetchData().then(data => {
13+
expect(eval(data)).toEqual(123);
14+
})
15+
})
16+
*/
17+
18+
// 【2】mock 对应方法 方案,异步变同步
19+
// 需要在 __mocks__ 文件夹下建立同名文件
20+
jest.mock('./08-mock2');
21+
// jest.unmock('./08-mock2'); // 取消模拟
22+
test('测试 fetchData', () => {
23+
return fetchData().then(data => {
24+
expect(eval(data)).toEqual(123);
25+
})
26+
})
27+
28+
// 【3】automock
29+
// jest.config.js 中打开 automock: true
30+
// 会自动在 __mocks__ 文件夹下找同名文件,省去了手动调用
31+
// jest.mock('./08-mock2');
32+
33+
// 【4】使用 __mocks__ 时部分同步函数仍然使用原文件中的
34+
const { getNumber } = jest.requireActual('./08-mock2')
35+
test('测试 getNumber', () => {
36+
expect(getNumber()).toEqual(123);
37+
})
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export default (callback) => {
2+
setTimeout(() => {
3+
callback();
4+
setTimeout(() => {
5+
callback();
6+
}, 3000);
7+
}, 3000);
8+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import timer from './09-mock-timer'
2+
3+
/**
4+
* 需要等定时器执行,时间长
5+
*/
6+
// test('测试 timer', (done) => {
7+
// timer(() => {
8+
// expect(1).toBe(1)
9+
// done()
10+
// })
11+
// })
12+
13+
/**
14+
* 使用 useFakeTimers / runAllTimers / runOnlyPendingTimers / advanceTimersByTime
15+
* 缩短 timers 时间
16+
*/
17+
// 各个用例之间定时器不影响
18+
beforeEach(() => {
19+
jest.useFakeTimers()
20+
})
21+
test('测试 timer', () => {
22+
const fn = jest.fn()
23+
timer(fn)
24+
25+
// * 定时器立即执行
26+
// jest.runAllTimers() // 执行2次
27+
// * 只运行队列中的timer
28+
// jest.runOnlyPendingTimers() // 执行1次
29+
// * 快进x
30+
jest.advanceTimersByTime(3000) // 快进3s
31+
32+
expect(fn).toHaveBeenCalledTimes(1)
33+
jest.advanceTimersByTime(3000) // 再快进3s
34+
expect(fn).toHaveBeenCalledTimes(2)
35+
})
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Util {
2+
a (a, b) {
3+
// 复杂代码 ...
4+
return a + b
5+
}
6+
b () {
7+
// 复杂代码 ...
8+
}
9+
}
10+
export default Util
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import Util from './10-es6-class'
2+
3+
/**
4+
* 常规 es6-class 测试
5+
* 重点关注 func.test.js 模拟 Util class
6+
*/
7+
let util = null
8+
beforeAll(() => {
9+
util = new Util()
10+
})
11+
12+
test('测试 a 方法', () => {
13+
expect(util.a(1,2)).toBe(3)
14+
})
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import Util from './10-es6-class'
2+
3+
const demoFunction = (a, b) => {
4+
const util = new Util()
5+
util.a(a)
6+
util.b(b)
7+
}
8+
9+
export default demoFunction

0 commit comments

Comments
 (0)