TypeScript配合Jest测试时如何Mock跨文件调用的函数?
问题原因及修复方案
核心错误点
- 你调用
jest.mock的目标模块错误:你需要mock的是存放calculatePrice的coreLogic.ts,但当前代码mock的是prepareStatement.ts,导致你在__mocks__文件夹下创建的coreLogic.ts完全没有生效,运行时调用的还是原生未被mock的calculatePrice方法,自然不存在mockImplementationOnce等jest mock专属方法。 - 测试文件未正确导入
coreLogic.ts下的calculatePrice,无法对mock方法做实现修改。 - 测试用例逻辑缺失:你没有主动调用
processCosts方法,直接对processCost变量断言,即使mock配置正确也会断言失败。 - 若你使用jest原生断言,
to.equal是chai的语法,需替换为jest支持的toEqual。
修正步骤
- 替换jest.mock的目标模块路径为
coreLogic.ts的实际路径,示例:
// 替换原来的jest.mock('../statements/prepareStatement'),路径以你项目中coreLogic.ts的实际存放位置为准 jest.mock('../statements/coreLogic');
- 测试文件顶部导入必要依赖:
import { processCosts } from '../statements/prepareStatement'; import { calculatePrice } from '../statements/coreLogic';
- 修正测试用例代码:
it('should calculate processCost and 4 x what calculatePrice returns', async () => { (calculatePrice as jest.Mock).mockImplementationOnce(() => 100.00); const processCost = processCosts(); // 按需传入processCosts需要的参数 expect(processCost).toEqual(400.00); });
内容的提问来源于stack exchange,提问作者friartuck
相关产品推荐
相关产品推荐

