我目前难以对Angular中可观察到的组件进行单元测试
我有这个课堂组件:
export class HomePage {
signInLoadingState$: Observable<AsyncActionStatus>;
constructor(private ngRedux: NgRedux<AppState>, private router: Router) {
//signInLoadingState is an enum
this.signInLoadingState$ = this.ngRedux.select(s => s.user.signInLoadingState);
this.signInLoadingState$.subscribe({
next: this.navigateOnSuccess.bind(this)
});
}
navigateOnSuccess(result: AsyncActionStatus) {
if (result === AsyncActionStatus.SUCCEEDED) {
this.router.navigate([dashboardUrl]);
}
}
}
并且我想在使用AsyncActionStatus.SUCCEEDED
枚举值引发可观察对象时测试导航。
我正在尝试模拟选择器值以将成功值设置如下:
it('should navigate to new page', inject([Router], async (router: Router, done: DoneFn) => {
spyOn(router, 'navigate');
const stub = MockNgRedux.getSelectorStub<AppState, AsyncActionStatus>((s) => s.user.signInLoadingState);
stub.next(AsyncActionStatus.SUCCEEDED);
stub.complete();
fixture.detectChanges();
await fixture.whenStable();
expect(router.navigate).toHaveBeenCalledWith([dashboardUrl]);
}));
但是导航从未被称为:(。