创建mock函数
let mockFn = jest.fn()
示例1
for (let i = 0; i < 3; i++) {
mockFn(i, 'a')
}
console.log(mockFn.mock)
输出结果
{
calls: [ [ 0, 'a' ], [ 1, 'a' ], [ 2, 'a' ] ], //每次调用时传入的参数
instances: [ undefined, undefined, undefined ],// 如果是类的话,此属性保存的是每次被示例化的对象
invocationCallOrder: [ 1, 2, 3 ],
results: [
{ type: 'return', value: undefined },
{ type: 'return', value: undefined },
{ type: 'return', value: undefined }
]
}
示例2
let result = mockFn(1, 2, 3);
// 断言mockFn的执行后返回undefined
expect(result).toBeUndefined();
// 断言mockFn被调用
expect(mockFn).toBeCalled();
// 断言mockFn被调用了一次
expect(mockFn).toBeCalledTimes(1);
// 断言mockFn传入的参数为1, 2, 3
expect(mockFn).toHaveBeenCalledWith(1, 2, 3);
示例3
myMock
.mockReturnValueOnce(10)//第一次调用时返回10
.mockReturnValueOnce('x')//第二次调用是返回x
.mockReturnValue(true);//第三次以后都返回true
console.log(myMock(), myMock(), myMock(), myMock());
// 10 x true true
示例4
test('测试jest.fn()返回固定值', () => {
let mockFn = jest.fn().mockReturnValue('default');
// 断言mockFn执行后返回值为default
expect(mockFn()).toBe('default');
})
test('测试jest.fn()内部实现', () => {
let mockFn = jest.fn((num1, num2) => {
return num1 * num2;
})
// 断言mockFn执行后返回100
expect(mockFn(10, 10)).toBe(100);
})
test('测试jest.fn()返回Promise', async () => {
let mockFn = jest.fn().mockResolvedValue('default');
let result = await mockFn();
// 断言mockFn通过await关键字执行后返回值为default
expect(result).toBe('default');
// 断言mockFn调用后返回的是Promise对象
expect(Object.prototype.toString.call(mockFn())).toBe("[object Promise]");
})
示例5
mock axios整个模块
import fetch from 'axios'
jest.mock('axios')
fetch.get.mockResolvedValue('success')
function fetchData() {
return fetch.get('www.baidu.co ')
}
test('测试数据获取', () => {
return fetchData().then(res => {
expect(res).toBe('success')
})
})
示例5
mock一个文件夹里的方法
jest.mock('./demo')
//jest.unmock('./demo') //取消模拟demo文件里的方法
//const { getData } = jest.requireActual('./demo') //使用真正的getData方法而非mock的方法
import { fetchData } from './demo'
test('测试fetchData', () => {
return fetchData().then(res => {
expect(res).toBe('success')
})
})
jest(mock)
最新推荐文章于 2024-04-16 02:05:57 发布