在测试自定义 Hooks 时,模拟(Mock)外部依赖是确保测试准确性和独立性的关键。外部依赖可能包括 API 调用、浏览器 API、第三方库等。以下是如何使用 Jest 等工具进行 Mock 的具体方法和示例:
jest.mock()、jest.spyOn() 等方法localStorage、fetch)示例:Mock localStorage
示例:Mock fetch API
setTimeout、setInterval)对于依赖定时器的 Hook(如倒计时、轮询),使用 Jest 的定时器 Mock:
如果自定义 Hook 依赖第三方库(如 lodash、date-fns),可以直接 Mock 整个库:
当 Hook 依赖 React Context 时,可以通过模拟上下文提供者来注入测试数据:
jest.mock():完全替换模块,适用于第三方库或工具函数 // 自动模拟整个模块
jest.mock('./api');jest.spyOn():部分替换对象的方法,保留其他功能 // 只Mock localStorage.getItem,保留其他方法
const getItemSpy = jest.spyOn(Storage.prototype, 'getItem').mockReturnValue('mocked-value');mockResolvedValue / mockRejectedValue:模拟异步函数的成功/失败返回 // 模拟API成功响应
fetch.mockResolvedValue({ ok: true, json: () => ({ data: 'test' }) });
// 模拟API失败响应
fetch.mockRejectedValue(new Error('Network error')); afterEach(() => {
jest.clearAllMocks(); // 清除调用记录
// 或 jest.resetAllMocks(); // 清除调用记录并重置实现
});通过合理使用 Mock 技术,可以确保自定义 Hooks 的测试聚焦于自身逻辑,不受外部依赖的波动影响,从而提高测试的稳定性和可靠性。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。