0

我正在尝试为 Angular 10 应用程序编写端到端规范,但我无法通过路由器/导航测试从一个组件到另一个组件(当我在浏览器中运行应用程序时工作正常)。

我的路线配置如下:

export const routes: Routes = [
  {
    path: 'bulk-edit',
    component: BulkEditComponent,
    data: {
      title: 'Bulk Edit',
    },
  }
];

我的导航栏模板为:

<header>
  <mat-toolbar fxLayout="row" fxLayoutAlign="space-between center" color="primary">
    <div>
      <button mat-icon-button (click)="auth.login()" *ngIf="!auth.loggedIn">
        <mat-icon>login</mat-icon>
      </button>

      <button mat-icon-button [matMenuTriggerFor]="menu">
        <mat-icon>apps</mat-icon>
      </button>
      <mat-menu #menu="matMenu">
        <button mat-menu-item routerLink="bulk-edit" *ngIf="auth.loggedIn">
          <mat-icon>settings_input_component</mat-icon>
          <span>Bulk Edit</span>
        </button>
      </mat-menu>
      <span>{{ title }}</span>
    </div>

    <div>
      <app-publisher-selector *ngIf="auth.loggedIn"></app-publisher-selector>
      <button mat-icon-button (click)="auth.logout()" *ngIf="auth.loggedIn" matTooltip="Log Out">
        <mat-icon>sensor_door</mat-icon>
      </button>
    </div>
  </mat-toolbar>
</header>

我的规格如下:

spectator = createComponent();
loader    = TestbedHarnessEnvironment.loader(spectator.fixture);

const menu = await loader.getHarness(MatMenuHarness);
await menu.open();

const menuItems = await menu.getItems();
expect(menuItems.length).toEqual(1);
expect(await menuItems[0].getText()).toMatch('Bulk Edit');

await menuItems[0].click();
await spectator.fixture.whenStable();

// THIS IS WHERE IT STOPS PASSING
expect(spectator.inject(Location).path()).toEqual('bulk-edit');

我尝试了不同的变体createComponent,无论是createComponentFactorycreateRoutingFactory,有或没有stubsEnabled。似乎没有任何工作,并且路由不会触发加载附加到路由的组件。

我已经能够在单击该console.log 时添加一个事件,并且单击确实在规范执行期间触发了它,因此该事件会传播;只是路由没有运行。

的值(spectator.fixture.nativeElement as HTMLDivElement).outerHTML不变。

编辑:我创建了一个小型复制项目,它托管在https://stackblitz.com/edit/angular-ivy-epvfki但是它不能直接在 StackBlitz 上运行(不能在浏览器中运行 jest),所以它需要下载和

yarn install
ng test

这个测试应用程序有 2 个按钮通向 2 个路由,规范单击一个按钮并测试路由是否触发,但它没有。

4

0 回答 0