我正在尝试为 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
,无论是createComponentFactory
或createRoutingFactory
,有或没有stubsEnabled
。似乎没有任何工作,并且路由不会触发加载附加到路由的组件。
我已经能够在单击该console.log 时添加一个事件,并且单击确实在规范执行期间触发了它,因此该事件会传播;只是路由没有运行。
的值(spectator.fixture.nativeElement as HTMLDivElement).outerHTML
不变。
编辑:我创建了一个小型复制项目,它托管在https://stackblitz.com/edit/angular-ivy-epvfki但是它不能直接在 StackBlitz 上运行(不能在浏览器中运行 jest),所以它需要下载和
yarn install
ng test
这个测试应用程序有 2 个按钮通向 2 个路由,规范单击一个按钮并测试路由是否触发,但它没有。