目标 :
介绍 jest mock
介绍 jest mock 常用函数Fn()
编写案例
什么是 mock , 为什要使用 mock
在单元测试中 ,我们一般对代码进行最小单元的测试 , 并不会关心模块/业务之间的耦合 , 所以我们会使用 mock 工具进行数据/方法的模拟实现 , 节约不必要的测试用例代码
jest 种的常用 mock 函数
jest 内置了 mock 功能足够应付大部分的测试场景
fn() 最简单的 mock 函数 , 如果不定义参数的话默认返回 undefind
test("sum 1+1 =2", () => {
expect(sum(1, 1)).toBe(2);
});
test("使用fn() mock一个 undefined 数据", () => {
let mockResult = jest.fn();
expect(mockResult()).toBeUndefined();
});
test("使用fn() mock 数据 观察是否被调用", () => {
let mockResult = jest.fn();
let useReuslt = mockResult();
expect(mockResult).toBeCalled();
});
test("使用fn() mock 数据 观察是否被调用一次", () => {
let mockResult = jest.fn();
let useReuslt = mockResult();
expect(mockResult).toBeCalledTimes(1);
});
test("使用fn() mock一个带参函数", () => {
let mockResult = jest.fn();
let paramsResult = mockResult(1, 2, 3);
expect(mockResult).toHaveBeenCalledWith(1, 2, 3);
});
test("使用fn() mock一个带参函数", () => {
let mockResult = jest.fn();
let paramsResult = mockResult(1, 2, 3);
expect(mockResult).toHaveBeenCalledWith(1, 2, 3);
});
test("使用fn() 设置返回值", () => {
let mockResult = jest.fn().mockReturnValue("linqisheng");
let result = mockResult();
expect(result).toBe("linqisheng");
});
test("使用fn() 自定义函数", () => {
let mockResult = jest.fn((str) => str);
expect(mockResult("linqisheng")).toBe("linqisheng");
});
test("使用fn() 自定义异步函数 promise", () => {
let mockResult = jest.fn().mockResolvedValue("linqisheng");
// 断言mockFn调用后返回的是Promise对象
expect(Object.prototype.toString.call(mockResult())).toBe("[object Promise]");
});