`unit-test` builder resolves include paths relative to sourceRoot instead of project root, breaking secondary entry points tests

Aperta
#33,467 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
58/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
angular, typescript

Direzione di ricerca

Inizia eseguendo la riproduzione minima con il builder @angular/build:unit-test e verifica come vengono risolti i relativi pattern di inclusione da angular.json. Verifica il comportamento con una libreria che contenga il percorso mostrato my-sub-package/**/*.spec.ts. Il lavoro è completato quando i pattern vengono risolti dalla radice del progetto e ng test individua i test negli entry point secondari senza attraversamento del percorso tramite ../.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

angular/build:unit-test area: @angular/build
Command

test

Is this a regression?
  • Yes, this behavior used to work in the previous version
The previous version in which this bug was not present was

No response

Description

When using the @angular/build:unit-test builder in a library project that contains Secondary Entry Points (sub-packages), the builder incorrectly resolves the glob patterns defined in the include array (inside angular.json) relative to the project's sourceRoot (usually .../src) instead of the project's root.

Because the unit-test builder anchors include patterns to sourceRoot, it cannot discover test files located in secondary entry points unless developers use relative path traversal (for example, ../my-sub-package/**/*.spec.ts).

Minimal Reproduction

Create an Angular library project.
2. Generate a secondary entry point inside the library root (for example, projects/my-lib/my-sub-package/).
3. Add a unit test inside the secondary entry point:

projects/my-lib/my-sub-package/my-sub.spec.ts
  1. Configure the test target in angular.json using @angular/build:unit-test:

    {
      "options": {
        "include": [
          "**/*.spec.ts",
          "my-sub-package/**/*.spec.ts"
        ],
        "tsConfig": "projects/my-lib/tsconfig.spec.json"
      }
    }
    
  2. Run:

    ng test
    
Exception or Error

The builder should resolve the include patterns relative to the project's root, or otherwise recognize ng-packagr secondary entry points, allowing patterns such as:

{
  "include": [
    "**/*.spec.ts",
    "my-sub-package/**/*.spec.ts"
  ]
}

to correctly match test files located in:

projects/my-lib/my-sub-package/
Workaround

Currently, developers must escape the sourceRoot directory by using a parent path segment in angular.json:

{
  "options": {
    "include": [
      "**/*.spec.ts",
      "../my-sub-package/**/*.spec.ts"
    ],
    "tsConfig": "projects/my-lib/tsconfig.spec.json"
  }
}
Your Environment
_                      _                 ____ _     ___
    / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
   / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
  / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |
 /_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
                |___/
    

Angular CLI       : 22.0.4
Angular           : 22.0.2
Node.js           : 24.16.0
Package Manager   : npm 11.13.0
Operating System  : linux x64

┌───────────────────────────────────┬───────────────────┬───────────────────┐
│ Package                           │ Installed Version │ Requested Version │
├───────────────────────────────────┼───────────────────┼───────────────────┤
│ @angular/animations               │ 22.0.2            │ ^22.0.2           │
│ @angular/build                    │ 22.0.4            │ ^22.0.4           │
│ @angular/cli                      │ 22.0.4            │ ^22.0.4           │
│ @angular/common                   │ 22.0.2            │ ^22.0.2           │
│ @angular/compiler                 │ 22.0.2            │ ^22.0.2           │
│ @angular/compiler-cli             │ 22.0.2            │ ^22.0.2           │
│ @angular/core                     │ 22.0.2            │ ^22.0.2           │
│ @angular/forms                    │ 22.0.2            │ ^22.0.2           │
│ @angular/localize                 │ 22.0.2            │ ^22.0.2           │
│ @angular/platform-browser         │ 22.0.2            │ ^22.0.2           │
│ @angular/platform-browser-dynamic │ 22.0.2            │ ^22.0.2           │
│ @angular/router                   │ 22.0.2            │ ^22.0.2           │
│ @angular/service-worker           │ 22.0.2            │ ^22.0.2           │
│ ng-packagr                        │ 22.0.0            │ ^22.0.0           │
│ rxjs                              │ 7.8.2             │ ~7.8.2            │
│ typescript                        │ 6.0.3             │ ^6.0.3            │
│ vitest                            │ 4.1.9             │ ^4.1.9            │
│ zone.js                           │ 0.16.2            │ ^0.16.2           │
└───────────────────────────────────┴───────────────────┴───────────────────┘
Anything else relevant?

No response

Lingua principale
TypeScript
Stelle
27k
Fork
11.8k
Merge medio
16h 21m
PR unite (30g)
170

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di angular/angular-cli

Tutte le issue di angular/angular-cli

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.