Angular+Jest单元测试遇Cannot find module报错求助
在Angular项目中使用Jest执行单元测试时,遇到大量"Cannot find module"错误,即使确认依赖导入和路径配置正确仍无法解决,以下是针对性的排查和解决方法:
1. 配置Jest模块路径映射
Jest默认无法识别Angular项目中src/开头的绝对路径,需在jest.config.js(或jest.config.ts)中添加路径映射:
module.exports = { // 其他配置项... moduleNameMapper: { '^src/(.*)$': '<rootDir>/src/$1' } };
若在angular.json中配置Jest,找到projects.[你的项目名].architect.test.options,补充:
"jest": { "moduleNameMapper": { "^src/(.*)$": "<rootDir>/src/$1" } }
2. 同步TypeScript路径配置
确保tsconfig.json和tsconfig.spec.json的paths配置包含对应映射:
{ "compilerOptions": { // 其他配置项... "paths": { "src/*": ["src/*"] } } }
注意tsconfig.spec.json需继承主配置,或单独配置相同的paths规则。
3. 检查路径大小写一致性
Jest在Linux/macOS系统下对文件路径大小写敏感,需确认导入语句的路径大小写与实际文件系统完全匹配。比如导入路径src/app/shared/services/common/common-helper.service,实际文件名不能是Common-Helper.Service.ts这类变体。
4. 清理Jest缓存
Jest的缓存机制可能保留旧的模块解析信息,执行命令清理缓存:
npx jest --clearCache
5. 验证服务文件的导出与路径
确认CommonHelperService所在文件的路径与导入路径完全匹配,文件后缀为.ts,且类的导出语句正确(如export class CommonHelperService),无拼写错误。
6. 检查测试模块的依赖声明
在app-routing.spec.ts中,确保测试模块正确声明了依赖的服务。例如NavbarComponent依赖CommonHelperService,需在测试配置中添加:
import { CommonHelperService } from 'src/app/shared/services/common/common-helper.service'; beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [NavbarComponent], providers: [CommonHelperService] }).compileComponents(); });
内容的提问来源于stack exchange,提问作者nhoyti

