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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:09:22