Angular - Невозможно выполнить модульный тест int для моделирования наблюдаемого компонента - PullRequest
0 голосов
/ 28 октября 2019

У меня сейчас есть некоторые проблемы с модульным тестированием компонента, наблюдаемого в 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]);
    }));

Но навигация никогда не вызывается :(.

...