Repository navigation
unit-test builder resolves include paths relative to sourceRoot instead of project root, breaking secondary entry points tests #33467
Description
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
-
Configure the test target in
angular.jsonusing@angular/build:unit-test:{ "options": { "include": [ "**/*.spec.ts", "my-sub-package/**/*.spec.ts" ], "tsConfig": "projects/my-lib/tsconfig.spec.json" } } -
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
Activity
fix(@angular/build): resolve unit-test include patterns from the proj…
alan-agius4 commentedon Sep 29, 2026
The schema description for
includeandexcludewas inaccurate and is being corrected in #34204 to clarify that paths and patterns are resolved relative to the project'ssourceRoot(not the project root). This behavior is intentional and aligns with how test discovery operates across builders.If your library includes secondary entry points located outside of
src/, you should update the library'ssourceRootinangular.jsonto point to the project root (e.g."sourceRoot": "projects/my-lib"instead of"projects/my-lib/src"). This allowsincludepatterns like**/*.spec.tsormy-sub-package/**/*.spec.tsto discover test files across all entry points without needing parent directory traversal.