В настоящее время я пытаюсь написать тест, который выполнит следующие действия:
- Загрузка моего компонента
- Ожидание возврата из класса обслуживания (HTTP-вызов + Observable)
- Возвращено проверочное значение.
Класс обслуживания:
getMyInfo(): Observable<any[]> {
return this.httpClient.get(`${this.serviceurl}/all`) as Observable<any[]>;
}
Код соответствующего компонента:
ngOnInit() {
this.myService.getMyInfo().subscribe((data: any[]) => {
console.log('I was called')
this.myInfo = data;
})
}
В тестовом классе с использованием этого методаиз службы не будет работать, метод вызывается, однако возвращение никогда не применяется в классе (подписка).
Использование заглушки работает, но это не то, что я хочу, так как я хочу e2e.
const serviceStub = {
getMyInfo() {
return fakeAsyncResponse([{ id: 1,name: 'myname'}]);
}
};
it("should request names on component initiation.", inject([FrontendComponent, Service], async(component: FrontendComponent, service: Service) => {
let debugElement = fixture.debugElement;
let Service = debugElement.injector.get(Service);
let incrementSpy = spyOn(Service, 'getMyInfo').and.callThrough();
component.ngOnInit();
expect(incrementSpy).toHaveBeenCalled();
await fixture.whenStable();
fixture.detectChanges();
console.log(component.myInfo);
expect(component.myInfo.length).toEqual(1);
}));
Подводя итог, как я могу обработать реальные вызовы http и затем обработать ожидаемое утверждение, не заглушая классы обслуживания?