angular / angular/angular-cli

Using overrideComponent breaks code coverage when testing with aot: true

Ouverte
#30,127 9 commentaires 12 réactions 0 personnes assignées Voir sur GitHub
area: @angular/build devkit/build-angular:karma freq1: low severity3: broken type: bug/fix
Langage dominant
TypeScript
Étoiles
27k
Forks
11.8k
Merge moyen
14 h 23 min
PR mergées (30 j)
162

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 `TestBed.overrideComponent` to stub a child component, the test code coverage is no longer accurate

### Minimal Reproduction

Generate a new app with latest CLI and add a component:

```
npx @angular/cli@20.0.0-next.6 new aot-coverage --defaults --no-routing
cd aot-coverage
ng g c user
```

Use app-user in app.html:
```html

Hello, aot-coverage

```

Edit angular.json to add "aot": true in the test section and run:
```
ng test --no-watch --code-coverage
```

Coverage is 100%
```
Statements : 100% ( 12/12 )
Branches : 100% ( 11/11 )
Functions : 100% ( 3/3 )
Lines : 100% ( 6/6 )
```

Now, in the app.spec.ts, add in `beforeEach`:

```ts
TestBed.overrideComponent(App, {
remove: {
imports: [User],
},
add: {
imports: [User],
}
});
```

(this happens with a proper stub of course but even removing the import and adding it back works to reproduce the issue)

Run the tests again:

```
ng test --no-watch --code-coverage
```

Coverage is now inaccurate because the template is not properly covered:
```
Statements : 58.33% ( 7/12 )
Branches : 90.9% ( 10/11 )
Functions : 66.66% ( 2/3 )
Lines : 66.66% ( 4/6 )
```

### Exception or Error

```text

```

### Your Environment

```text
Angular CLI: 20.0.0-next.6
Node: 22.14.0
Package Manager: npm 10.9.0
OS: darwin arm64

Angular: 20.0.0-next.7
... common, compiler, compiler-cli, core, forms
... platform-browser, router

Package Version
------------------------------------------------------
@angular-devkit/architect 0.2000.0-next.6
@angular-devkit/core 20.0.0-next.6
@angular-devkit/schematics 20.0.0-next.6
@angular/build 20.0.0-next.6
@angular/cli 20.0.0-next.6
@schematics/angular 20.0.0-next.6
rxjs 7.8.2
typescript 5.8.3
zone.js 0.15.0
```

### Anything else relevant?

_No response_

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Reproduisez le problème dans l’application générée à l’aide de angular.json, app.spec.ts, TestBed.overrideComponent et des commandes fournies ng test --no-watch --code-coverage. Comparez la couverture avant et après l’override, puis suivez les points d’entrée des tests Angular CLI et de la couverture AOT. C’est terminé lorsque l’override ne rend plus la couverture du template du composant inexacte.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
angular, typescript
Domaine
build-system, testing
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Active
Clarté
Plutôt claire
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.