angular / angular/angular-cli

TestBed.overrideComponent doesn't work with AOT and webpack

オープン
#32,628 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
area: @angular-devkit/build-angular devkit/build-angular:karma freq1: low severity3: broken type: bug/fix
主要言語
TypeScript
スター
27k
フォーク
11.8k
平均マージ
14時間 23分
マージ済み PR(30日)
162

説明

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

TestBed.overrideComponent and TestBed.overrideModule don't seem to work with karma, webpack builder (builderMode: browser) and aot enabled. Changing any of these settings, so builderMode: application or disabling aot "fixes" the problem. The same issue was reported here https://github.com/angular/angular-cli/issues/30017 but i guess it was only fixed for esbuild? Is there any workaround for this? or can it be fixed for angular20?

### Minimal Reproduction

Create a simple valid component, turn on AOT for Karma, and make a test where you use TestBed.overrideComponent to reset metadata. You don't even need to specify an actual override in the second parameter to trigger the issue: TestBed.overrideComponent(YourComponent, {}) triggers the failure.

builderMode: browser needs to be set

### Exception or Error

```text
Error: App class doesn't have @Component decorator or is missing metadata.
at invalidTypeError (node_modules/@angular/core/fesm2022/testing.mjs:1661:12)
at forEach (node_modules/@angular/core/fesm2022/testing.mjs:1084:23)
at asyncGeneratorStep (node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js:3:1)
at apply (node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js:17:1)
at _ZoneDelegate.invoke (node_modules/zone.js/fesm2015/zone.js:398:28)
at ProxyZoneSpec.onInvoke (node_modules/zone.js/fesm2015/zone-testing.js:2132:39)
```

### Your Environment

```text
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/

Angular CLI: 20.3.18
Node: 22.22.0
Package Manager: npm 10.9.4
OS: win32 x64

Angular: 20.3.17
... common, compiler, compiler-cli, core, forms
... platform-browser, router

Package Version
---------------------------------------
@angular-devkit/architect 0.2003.18
@angular-devkit/build-angular 20.3.16
@angular-devkit/core 20.3.18
@angular-devkit/schematics 20.3.18
@angular/build 20.3.18
@angular/cli 20.3.18
@schematics/angular 20.3.18
rxjs 7.8.2
typescript 5.9.3
zone.js 0.15.1
```

### Anything else relevant?

_No response_

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

最小限の再現から始めます。Karma、browser mode の webpack builder、AOT を有効にした状態で、TestBed.overrideComponent または TestBed.overrideModule を使用するコンポーネントテストを作成します。application builder mode または AOT を無効にした場合の失敗と比較し、その後、影響を受ける構成で override テストが @Component メタデータが見つからないエラーなしに実行されることを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
angular, typescript
領域
build-system, testing-qa
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。