Интервал модульного тестирования и switchMap - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть компонент со следующей функцией ngOnInit, которая опрашивает сервисный метод для обновления статуса:

ngOnInit() {
this.waitingForMachineToStart = interval(2000)
  .pipe(
    distinctUntilChanged(),
    switchMap(() => this.machineService.getMachineStatus(this.machineId)),
  )
  .subscribe(res => {
    this.machineStatus = res.status;
    if (this.machineStatus === 'STARTED') {
      this.machineStarted = res
      this.notify()
    }
  });
}

Я пытаюсь проверить, что обновления на самом деле происходят, используя следующий код:

beforeEach(() => {
  fixture = TestBed.createComponent(UploadComponent);
  component = fixture.componentInstance;
  fixture.detectChanges();
});


it('should start checking for status updates', fakeAsync(() => {
  const machineService = TestBed.get(MachineService);
  spyOn(machineService, 'getMachineStatus').and.returnValue(Observable.create().pipe(map(() => {status :'STARTED'})));
  // Should not be initialised yet
  expect(component.machineStarted).toBeUndefined();
  tick(2000);
  //FAILING TEST
  expect(component.machineStarted).toBe({status :'STARTED'});
}));

Тем не менее, тест все равно не пройден.

Заранее спасибо

...