You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jest.mock()传入有效模块名返回undefined问题排查求助

问题原因与解决方案

核心问题1:mock未适配默认导入规则

你使用import validator from 'validator'的默认导入语法引入CommonJS规范的validator模块,而你写的jest.mock工厂函数直接返回了包含isEmail的对象,没有适配ES模块默认导入的格式,导致导入的validator变量取值为undefined。
修改mock写法如下:

jest.mock('validator', () => ({
  __esModule: true,
  default: {
    isEmail: () => true
  }
}));

添加__esModule: true标记该mock为ES模块,同时把mock的方法放到default属性下,匹配默认导入的取值逻辑。

核心问题2:roots配置错误

你把node_modules加入了jest配置的roots数组,该配置项的作用是指定Jest扫描测试文件的根目录,不需要包含依赖目录,该配置会导致Jest模块解析优先级异常,优先加载node_modules下的真实模块,忽略你定义的mock规则。
修改jest.config.js的roots配置:

roots: ['<rootDir>/src'],

可选验证项

确认你的tsconfig.json中开启了esModuleInterop: true,该配置是TypeScript与CommonJS模块做默认导入交互的必要配置,未开启也可能导致导入模块取值异常。

内容的提问来源于stack exchange,提问作者Eliabe França

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 22:36:00