ionic-team / ionic-team/angular-toolkit

`ionic g page xxx` results in page where the test does not compile

オープン
#487 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
TypeScript
スター
73
フォーク
34
平均マージ
6分
マージ済み PR(30日)
5

説明

1. create an Angular app from the starter (using the latest stuff merged for "standalone")
2. ionic g page foo-bar
3. npm test

The test for the new page will fail to compile:

```
> ng-test@0.0.1 test
> ng test

✔ Browser application bundle generation complete.

Error: src/app/foo-bar/foo-bar.page.spec.ts:8:14 - error TS2304: Cannot find name 'async'.

8 beforeEach(async(() => {
```

The problem is with the `beforeEach`. It is calling `async` like a function:

```typescript
beforeEach(async(() => {
fixture = TestBed.createComponent(FooBarPage);
component = fixture.componentInstance;
fixture.detectChanges();
}));
```

The `async` is not actually needed in this case, so we could do:

```typescript
beforeEach(() => {
fixture = TestBed.createComponent(FooBarPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
```

On another note, the `beforeEach()` for the generated pages (at least with the tabs starter) looks like this:

```typescript
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [Tab1Page, IonicModule, ExploreContainerComponent],
}).compileComponents();

fixture = TestBed.createComponent(Tab1Page);
component = fixture.componentInstance;
fixture.detectChanges();
});
```

The `TestBed.configureTestingModule().compileComponents()` is not _technically_ required, but it _does_ make a nice place to hang mocks, which is a _very_ common need (or should be if ppl are doing unit testing correctly).

**Example:**

```typescript
beforeEach(async () => {
initializeTestData();
await TestBed.configureTestingModule({
imports: [TeaPage],
})
.overrideProvider(TeaService, { useFactory: createTeaServiceMock })
.overrideProvider(NavController, { useFactory: createNavControllerMock })
.compileComponents();

const tea = TestBed.inject(TeaService);
(tea.getAll as jasmine.Spy).and.returnValue(of(teas));
fixture = TestBed.createComponent(TeaPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
```

As such, having the `TestBed.configureTestingModule()` there, to begin with, is very handy for all but trivial or improperly tested pages. So perhaps being consistent with the current tabs starter and having that in there would overall make things easier for developers.

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

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

評価

この issue はまだ評価されていません。

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

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