То, на чем я остановился, было следующее.Мне также пришлось сохранить индекс, чтобы я мог отменить его в конце теста, чтобы избежать ошибок «периодические таймеры все еще в очереди»:
ngOnInit() {
// Store the subscription so we can unsubscribe when testing
this.pollingSubscription = interval(2000).pipe(
switchMap(() => this.dataService.getStatus())
).subscribe((result) => {
this.uploadStatus = result;
});
}
Затем выполните тестирование следующим образом:
it(`init`, fakeAsync(inject([DataService],
(dataService: DataService) => {
const testReturns = [
of('woo'),
of('yay')
];
let currentReturn = -1;
spyOn(dataService, 'getStatus').and.callFake(() => {
currentReturn++;
return testReturns[currentReturn];
});
expect(component.uploadStatus).toBeUndefined();
fixture.detectChanges();
// expect(component.uploadStatus).toBe('Login');
// spyOn(dataService, 'getStatus').and.returnValue(of('woo'));
component.ngOnInit();
tick(2000);
expect(component.uploadStatus).toBe('woo');
tick(2000);
expect(component.uploadStatus).toBe('yay');
// Unsubscribe to prevent the "periodic timers still in queue" errors
component.pollingSubscription.unsubscribe();
})));