別のページにナビゲートするボタンを表示するAngularコンポーネントの仕様を書いています。コンポーネントはRouter::navigate()
を使用しますが、それ自体にはルータのアウトレットがありません。親コンポーネントにはコンセントがあります。私の仕様では、テストでは、ボタンをクリックすると正しいパスにルーティングされることを確認する必要があります。コンセントのない経路探索を角度で評価する
私の現在の(壊れた)仕様はRouterTestingModule
を使用してDummyComponent
へのルートを提供しようとします。ボタンをスペックでクリックされたとき、私は次のエラーを取得する:
'Unhandled Promise rejection:', 'Cannot find primary outlet to load 'DummyComponent'', '; Zone:', 'angular', '; Task:', 'Promise.then', '; Value:', Error{__zone_symbol__error: Error{originalStack: 'Error: Cannot find primary outlet to load 'DummyComponent'
私は間違った方法でこの問題に近づいています。コンポーネントにルータのアウトレットがない場合、ルータのナビゲーションをテストする正しい方法は何ですか?
成分(擬似コード):
@Component({
template: `
Go to the <button (click)="nextPage">next page</button>
`
})
export class ExampleComponent {
public myId = 5;
constructor(private _router: Router);
public nextPage(): void {
this._router.navigate(['/example', this.myId]);
}
}
スペック。これは動作しません:
const FAKE_ID = 999;
describe('ExampleComponent Test',() => {
let exampleComponent: ExampleComponent;
let fixture: ComponentFixture<ExampleComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [ DummyComponent ],
imports: [
RouterTestingModule.withRoutes([
{ path: 'example/:id', component: DummyComponent }
]);
]
});
fixture = TestBed.createComponent(exampleComponent);
exampleComponent = fixture.componentInstance;
});
it('should route to example/:id', inject([Router, Location], (router: Router, location: Location) => {
fixture.detectChanges();
exampleComponent.myId = FAKE_ID;
const LINK_BUTTON = fixture.debugElement.query(By.css('button'));
LINK_BUTTON.nativeElement.dispatchEvent(new Event('click'));
expect(location.path()).toEqual('/example/' + FAKE_ID);
});
});