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

Chưa có ai nhận issue này.

Đánh giá

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

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.

Mô tả

area: @angular/build devkit/build-angular:karma freq1: low severity3: broken type: bug/fix
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:

<h1>Hello, aot-coverage</h1>
<app-user></app-user>

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:

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

Your Environment
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

Ngôn ngữ chính
TypeScript
Star
27k
Fork
11.8k
Merge trung bình
16 giờ 35 phút
Pull request đã merge (30 ngày)
176

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

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

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của angular/angular-cli

Tất cả issue của angular/angular-cli

Issue tương tự

Thêm issue về TypeScript

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.