angular / angular/angular-cli

Using overrideComponent breaks code coverage when testing with aot: true

Đang mở
#30,127 9 bình luận 12 reaction 0 người được giao Xem trên GitHub
area: @angular/build devkit/build-angular:karma freq1: low severity3: broken type: bug/fix
Ngôn ngữ chính
TypeScript
Star
27k
Fork
11.8k
Merge trung bình
14 giờ 23 phút
Pull request đã merge (30 ngày)
162

Mô tả

### 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_

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Tái hiện vấn đề trong ứng dụng được tạo bằng cách sử dụng angular.json, app.spec.ts, TestBed.overrideComponent và các lệnh ng test --no-watch --code-coverage được cung cấp. So sánh mức độ bao phủ trước và sau override, sau đó lần theo các điểm đầu vào của quá trình kiểm thử Angular CLI và mức độ bao phủ AOT. Hoàn tất khi override không còn khiến mức độ bao phủ template của component không chính xác.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
angular, typescript
Lĩnh vực
build-system, testing
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Sôi nổi
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
48/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.