jest 入门(二) mock fn函数使用

目标 :

介绍 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]");
});

你可能感兴趣的:(jest 入门(二) mock fn函数使用)