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

如何在Jest中mock导入的package.json文件?

Jest 导入 package.json 报错的解决方法

出现Cannot read properties of undefined (reading 'version')错误,是因为Jest运行测试环境时没有正确解析JSON文件模块,拿到的导入值为undefined,可以根据场景选下面的方案解决:

  • 方案1:单测试文件局部mock
    如果只有少数测试文件用到package.json的字段,直接在对应测试文件顶部调用jest.mock手动模拟模块即可,jest.mock会被自动提升到文件最顶部执行,不需要担心导入顺序问题:
// 测试文件顶部
jest.mock('./package.json', () => ({
  version: '0.0.0-test' // 自定义测试用的版本号即可
}));

// 后续正常导入、编写测试用例即可,pjson.version会正常拿到mock值
import pjson from './package.json';
  • 方案2:全局统一mock
    如果项目里大量测试文件都依赖package.json的字段,可以在Jest配置里做全局映射,避免每个测试文件重复写mock:
  1. 先在Jest配置文件(jest.config.js/jest.config.ts,或package.json的jest配置段)中添加模块映射规则:
module.exports = {
  // 保留原有其他配置
  moduleNameMapper: {
    '^./package.json$': '<rootDir>/__mocks__/pkgMock.js'
  }
}
  1. 在项目根目录新建__mocks__/pkgMock.js文件,写入mock内容:
module.exports = {
  version: '0.0.0-test'
};

配置完成后所有测试文件导入package.json时都会自动读取这个mock文件的内容。

  • 方案3:修复JSON解析配置(无需mock)
    这个错误本质上是Jest没有正确处理.json后缀的文件导入,新版本Jest默认支持JSON导入,如果出现这个问题可以检查配置里的transformIgnorePatterns是否误排除了json文件,或者安装对应转换依赖让Jest正常读取真实的package.json内容:
  1. 安装转换依赖:
npm i -D jest-transform-stub
  1. 在Jest配置中添加json文件的转换规则:
module.exports = {
  // 保留原有其他配置
  transform: {
    '^.+\\.json$': 'jest-transform-stub'
  }
}

配置后测试环境会直接读取真实package.json里的version字段,不需要额外写mock。

注意:mock时填写的导入路径必须和业务代码里的导入路径完全一致,比如业务代码是从'../package.json'导入的,mock时的路径匹配规则也要对应调整,否则mock不会生效。

内容的提问来源于stack exchange,提问作者Kenta Konno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:48:18