У меня есть служба Angular, работа которой заключается в опросе API каждые 60 секунд, чтобы проверить, подключен ли клиент по-прежнему:
export class AppService {
get isOnline$(): Observable<{ online: boolean }> {
return this.isOnlineSource.asObservable();
}
private isOnlineSource = new BehaviorSubject<{ online: boolean }>({ online: true });
constructor(private http: HttpClient) {
timer(0, 60000).switchMap(() =>
this.http.get(`${environment.apiUrl}/api/assessments/amionline`, environment.httpOptions)
.map(x => {
return { online: true };
})
.catch((err, caught) => {
return of({ online: false });
})
).
subscribe(data => this.isOnlineSource.next(data));
}
}
Как мне проверить этот код? Я думал, что блока fakeAsync с меткой () будет достаточно, чтобы вызвать наблюдаемое, но httpMock не получает запросов
Тестовый код:
it('should return online equals false.', fakeAsync(() => {
appService.isOnline$.subscribe(data => {
expect(data.online).toEqual(false);
});
tick(70000);
httpMock.expectOne(url).flush(undefined, mockErrorResponse);
httpMock.verify();
}));
});
Примечание: в тесте используется HttpClientTestingModule, а httpMock - это HttpTestingController