Angular多项目工作区配置jest-preset-angular tsconfig/ngcc报错求解
Angular多项目工作区jest-preset-angular配置方案
两个报错的核心原因:
- 根配置硬编码了根目录不存在的
tsconfig.spec.json,多项目结构下该文件只存在于各子项目目录 - 根目录
tsconfig.json是Angular CLI默认生成的solution类型配置,仅做项目引用,无实际paths等编译参数,ngcc无法直接读取解析
直接按以下结构配置即可正常运行:
1. 根目录jest.config.js配置
根目录只做子项目聚合,不写单项目相关的ngcc、tsconfig配置:
// jest.config.js (根目录) module.exports = { projects: [ '<rootDir>/projects/projectA', '<rootDir>/projects/projectB' ], testPathIgnorePatterns: [ '/node_modules/', '/test.ts$' ] }
2. 各子项目独立jest配置
在每个子项目目录(projects/projectA、projects/projectB)下新建各自的jest.config.js,独立指定tsconfig和ngcc规则:
// projects/projectA/jest.config.js // projectB 配置仅需保持路径和当前项目匹配即可 globalThis.ngJest = { skipNgcc: false, tsconfig: '<rootDir>/tsconfig.spec.json' }; module.exports = { preset: 'jest-preset-angular', setupFilesAfterEnv: ['<rootDir>/../../setup-jest.ts'], globalSetup: 'jest-preset-angular/global-setup', testMatch: ['<rootDir>/src/**/*.spec.ts'], testPathIgnorePatterns: ['<rootDir>/src/test.ts'] }
3. (可选)优化ngcc执行速度
如果觉得每次测试自动执行ngcc耗时过长,可以在根目录package.json添加postinstall脚本,安装依赖时提前完成ngcc编译,之后所有子项目配置里的skipNgcc改为true即可跳过测试时的ngcc步骤:
{ "scripts": { "postinstall": "ngcc --tsconfig ./projects/projectA/tsconfig.spec.json --tsconfig ./projects/projectB/tsconfig.spec.json" } }
该命令显式指定了所有子项目的tsconfig路径,不会触发solution-style tsconfig的解析警告。
运行命令
- 全量跑所有子项目测试:根目录直接执行
jest - 跑单个子项目测试:根目录执行
jest --selectProjects projectA,或进入对应子项目目录执行jest
内容的提问来源于stack exchange,提问作者Ambroise Rabier
相关产品推荐
相关产品推荐

