angular / angular/angular-cli

Angular 21 new unit test builder with Karma and zone.js

Open
#32,905 3 comments 4 reactions 0 assignees View on GitHub
area: @angular/cli gemini-triaged
Dominant language
TypeScript
Stars
27k
Forks
11.8k
Avg merge
14h 23m
Merged PRs (30d)
162

Description

### Command

test

### Is this a regression?

- [x] Yes, this behavior used to work in the previous version

### The previous version in which this bug was not present was

20

### Description

After upgrading from Angular 20 to 21, I ran into NGXXXX errors when running unit tests still with Karma and zone.js.
I found a [closed issue](https://github.com/angular/angular-cli/issues/32047) and a supposed fix for it, but that did not resolve the issue.
Others experienced the same and implemented workarounds which actually do work: [StackOverflow](https://stackoverflow.com/a/79837997), [Reddit](https://www.reddit.com/r/angular/comments/1p8suok/upgrading_from_angular_20_21_app_works_but_tests/).

I found that the solution could be that the `angular.json` has to be modified to be in line with the new project template like this:
- change `"builder": "@angular/build:karma`" to `"builder": "@angular/build:unit-test"`
- add `"runner": "karma"`
- remove the rest of the properties (according to [documentation](https://angular.dev/guide/testing/migrating-to-vitest#:~:text=does%20not%20support%20this) these derive from the development configuration)

I did not find anything regarding the necessity of this change in the documentation, but if that is the case, it would be wise to mention it and maybe even add a migration schematic.

Also its not clear what is the alternative for `"main": "src/test.ts"` which contains global test setup. My guess is that the `"setupFiles"` property would be the successor (like `"karmaConfig"` became `"runnerConfig"`), but that is [disabled for Karma](https://github.com/angular/angular-cli/blob/v21.2.5/packages/angular/build/src/builders/unit-test/runners/karma/executor.ts#L40).

So my question is: Where should I put global test setup with the new `"unit-test"` builder when using Karma?

Thanks in advance.

### Minimal Reproduction

npm test

### Exception or Error

```text

```

### Your Environment

```text
Angular CLI : 21.2.5
Node.js : 24.14.0
Package Manager : npm 11.9.0
Operating System : win32 x64
```

### Anything else relevant?

_No response_

Contributor guide

Open the contributing guide

Research direction

Start with packages/angular/build/src/builders/unit-test/runners/karma/executor.ts and compare the Angular 20 and 21 unit-test builder configuration in angular.json. Read the testing migration documentation linked in the report and trace how Karma handles global test setup. Done means the expected Karma configuration is established and the documentation or migration behavior addresses the reported upgrade path.

Written by the indexing model from the issue text.

Assessment

Tech stack
angular, typescript
Domain
build-system, testing
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.