乐闻世界logo
搜索文章和话题

Jest 中的 Mock 功能如何使用?如何创建 Mock 函数和模拟模块?

2月21日 15:54

Jest 的 Mock 功能是测试中隔离依赖和验证行为的重要工具:

1. 创建 Mock 函数:

javascript
const mockFn = jest.fn(); mockFn('arg1', 'arg2'); expect(mockFn).toHaveBeenCalledWith('arg1', 'arg2'); expect(mockFn).toHaveBeenCalledTimes(1);

2. Mock 返回值:

javascript
const mockFn = jest.fn(); mockFn.mockReturnValue(42); mockFn.mockReturnValueOnce(10).mockReturnValueOnce(20); // 或使用 mockResolvedValue 处理 Promise mockFn.mockResolvedValue('data');

3. Mock 实现:

javascript
const mockFn = jest.fn((a, b) => a + b); // 或使用 mockImplementation mockFn.mockImplementation((a, b) => a * b);

4. Mock 模块:

javascript
jest.mock('./api', () => ({ fetchData: jest.fn(() => Promise.resolve('data')) })); import { fetchData } from './api';

5. Spy 函数:

javascript
const spy = jest.spyOn(object, 'method'); spy.mockRestore(); // 恢复原函数

常用断言:

  • toHaveBeenCalled():被调用
  • toHaveBeenCalledWith(...args):用特定参数调用
  • toHaveBeenCalledTimes(n):调用次数
  • toHaveReturnedWith(value):返回特定值
  • toHaveLastReturnedWith(value):最后一次返回值

最佳实践:

  • Mock 外部依赖,不 Mock 被测代码
  • 测试完成后清理 Mock
  • 使用 jest.clearAllMocks() 清除调用记录
  • 使用 jest.restoreAllMocks() 恢复原始实现
标签:Jest