如何用Jest Mock同一文件中被其他命名导出依赖的命名导出
使用Jest Mock
uid 函数实现 doubleUid() 返回 foo_foo 完全可以在不修改原文件的前提下实现,核心是利用Jest的模块Mock能力,保留原模块的doubleUid逻辑,仅替换uid函数的实现。
假设原文件名为utils.js,对应的测试文件utils.test.js代码如下:
// 模拟目标模块,保留原doubleUid实现,替换uid为mock函数 jest.mock('./utils', () => { const originalModule = jest.requireActual('./utils'); return { ...originalModule, uid: jest.fn(() => 'foo') }; }); import { doubleUid, uid } from './utils'; test('doubleUid 应返回 foo_foo', () => { const result = doubleUid(); expect(result).toBe('foo_foo'); // 验证uid被调用了两次 expect(uid).toHaveBeenCalledTimes(2); });
实现逻辑说明
jest.requireActual('./utils'):获取原模块的真实代码,避免把doubleUid也一起Mock掉- 展开原模块的所有导出后,覆盖
uid为一个固定返回'foo'的Mock函数 - 导入模块后执行测试,此时
doubleUid内部调用的就是我们Mock后的uid,自然会返回foo_foo
内容的提问来源于stack exchange,提问作者bjnsn
相关产品推荐
相关产品推荐

