ionic-team / ionic-team/angular-toolkit

Component schematic adds redundant standalone flag and reverts to legacy `.spec.ts` when flag is removed

Đang mở
#521 1 bình luận 2 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
TypeScript
Star
73
Fork
34
Merge trung bình
6 phút
Pull request đã merge (30 ngày)
5

Mô tả

## Description

With Angular 19, components are standalone by default and do not require an explicit `standalone: true` flag. The `@ionic/angular-toolkit:component` schematic exhibits two inconsistent behaviors:

1. **With `"standalone": true` in `angular.json` schematics**
- The generated component and test scaffold are correct for standalone usage.
- **However**, the component decorator still includes `standalone: true` explicitly, which is redundant in Angular 19.

2. **Without the `standalone` option in schematics**
- The generated component decorator omits `standalone: true` (correct).
- The generated test `.spec.ts` falls back to the legacy NgModule-based pattern:
```ts
TestBed.configureTestingModule({
declarations: [TestComponent],
imports: [IonicModule.forRoot()]
}).compileComponents();
```
rather than the standalone pattern:
```ts
TestBed.configureTestingModule({
imports: [TestComponent],
}).compileComponents();
```

This inconsistency forces maintainers to either keep a redundant flag in their code or manually update specs.

---

## Current Behavior

- **With** `standalone: true` in schematics:
- Component decorator contains `standalone: true`.
- Test spec uses standalone-compatible setup.
- **Without** `standalone` in schematics:
- Component decorator is correct (no `standalone`).
- Test spec uses `declarations` and `IonicModule.forRoot()`, i.e., NgModule-based.

---

## Expected Behavior

- The schematic should **not** inject `standalone: true` in the component decorator (Angular 19 default).
- The `.spec.ts` should consistently use the standalone testing pattern, regardless of the schematics `standalone` setting:
```ts
TestBed.configureTestingModule({
imports: [TestComponent],
}).compileComponents();
```

---

## Reproduction Steps

1. Create a new Ionic + Angular 19 project:
```bash
ionic start myApp blank --type=angular
cd myApp
npm install @ionic/angular-toolkit@latest
```
2. **Case A:** Add to `angular.json`:
```jsonc
"schematics": {
"@ionic/angular-toolkit:component": {
"styleext": "scss",
"standalone": true
}
}
```
- Run `ionic generate component test`
- Observe redundant `standalone: true` in `test.component.ts`.
3. **Case B:** Remove the `standalone` option:
```jsonc
"schematics": {
"@ionic/angular-toolkit:component": {
"styleext": "scss"
}
}
```
- Run `ionic generate component test`
- Observe legacy NgModule-based test in `test.component.spec.ts`.

---

## Environment

- **@ionic/angular:** 8.5.5
- **@ionic/angular-toolkit:** 12.2.0
- **Angular CLI:** 19.2

---

Thank you for looking into this! Please let me know if you need further details.

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

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

Đánh giá

Issue này chưa được đánh giá.

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.