Shopware 6 Jest单元测试配置错误:无法定位模块
Shopware 6 Jest单元测试模块映射问题排查
1. 映射失败的可能原因
- Jest模块映射规则错误:如果
jest.config.js里的moduleNameMapper正则未精准匹配ES模块路径,比如未把^@shopware-ag/admin-extension-sdk/es/(.*)$正确映射到@shopware-ag/admin-extension-sdk/umd/$1,就会导致路径解析失败。 - UMD包结构不匹配:检查
node_modules/@shopware-ag/admin-extension-sdk/umd/data/目录,若不存在Criteria.js文件,说明SDK的UMD编译产物结构和ES模块不一致——虽然存在类型声明文件(.d.ts),但缺少对应的可执行JS模块。 - TypeScript配置冲突:如果项目使用TypeScript,
tsconfig.json中的paths配置可能和Jest的moduleNameMapper冲突,导致模块解析逻辑混乱。 - Jest缓存残留:Jest默认会缓存模块解析结果,之前错误的配置可能被缓存,修改配置后未生效。可删除
node_modules/.cache/jest目录,或运行测试时添加--no-cache参数。
2. package.json是否缺失依赖
- SDK版本不匹配:需安装与Shopware版本对应的
@shopware-ag/admin-extension-sdk版本(如Shopware 6.4对应SDK 2.x,6.5对应SDK 3.x),版本不兼容可能导致模块结构异常。 - Jest相关依赖缺失:若使用TypeScript编写测试,需确保安装
ts-jest、@types/jest;由于Admin SDK面向浏览器环境,还需安装jest-environment-jsdom,缺失这些依赖会引发解析或环境适配问题。 - 依赖版本冲突:检查
peerDependencies要求,比如Jest 28+需匹配对应版本的ts-jest,版本不匹配会导致模块解析报错。
快速排查步骤
- 验证
jest.config.js的映射规则,示例配置:
moduleNameMapper: { '^@shopware-ag/admin-extension-sdk/es/(.*)$': '<rootDir>/node_modules/@shopware-ag/admin-extension-sdk/umd/$1' }
- 手动确认
node_modules/@shopware-ag/admin-extension-sdk/umd/data/Criteria.js是否存在,不存在则更换SDK版本。 - 运行测试时添加
--verbose --no-cache参数,查看详细的模块解析日志,定位具体报错路径。 - 同步
tsconfig.json的compilerOptions.paths与Jest的moduleNameMapper配置,避免规则冲突。
内容的提问来源于stack exchange,提问作者rammi22
相关产品推荐
相关产品推荐

