Jest 的 Mock 功能是测试中隔离依赖和验证行为的重要工具:
1. 创建 Mock 函数:
javascriptconst mockFn = jest.fn(); mockFn('arg1', 'arg2'); expect(mockFn).toHaveBeenCalledWith('arg1', 'arg2'); expect(mockFn).toHaveBeenCalledTimes(1);
2. Mock 返回值:
javascriptconst mockFn = jest.fn(); mockFn.mockReturnValue(42); mockFn.mockReturnValueOnce(10).mockReturnValueOnce(20); // 或使用 mockResolvedValue 处理 Promise mockFn.mockResolvedValue('data');
3. Mock 实现:
javascriptconst mockFn = jest.fn((a, b) => a + b); // 或使用 mockImplementation mockFn.mockImplementation((a, b) => a * b);
4. Mock 模块:
javascriptjest.mock('./api', () => ({ fetchData: jest.fn(() => Promise.resolve('data')) })); import { fetchData } from './api';
5. Spy 函数:
javascriptconst spy = jest.spyOn(object, 'method'); spy.mockRestore(); // 恢复原函数
常用断言:
toHaveBeenCalled():被调用toHaveBeenCalledWith(...args):用特定参数调用toHaveBeenCalledTimes(n):调用次数toHaveReturnedWith(value):返回特定值toHaveLastReturnedWith(value):最后一次返回值
最佳实践:
- Mock 外部依赖,不 Mock 被测代码
- 测试完成后清理 Mock
- 使用
jest.clearAllMocks()清除调用记录 - 使用
jest.restoreAllMocks()恢复原始实现