Angular-无法进行int单元测试来模拟可观察的组件

时间:2019-10-28 07:23:23

标签: angular typescript unit-testing redux

我目前难以对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]);
    }));

但是导航从未被称为:(。

0 个答案:

没有答案
相关问题