Как правильно протестировать наблюдаемые для тестирования e2e в Карме? - PullRequest
0 голосов
/ 20 декабря 2018

В настоящее время я пытаюсь написать тест, который выполнит следующие действия:

  • Загрузка моего компонента
  • Ожидание возврата из класса обслуживания (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 и затем обработать ожидаемое утверждение, не заглушая классы обслуживания?

...