目前我正在尝试编写一个将执行以下操作的测试:
- 加载我的组件
- 等待服务类返回(HTTP Call + 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;
})
}
在测试类中,使用Service中的这个方法将不起作用,该方法被调用,但是返回永远不会在类中应用(订阅)。
使用存根有效,但这不是我想要的,因为我想要 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 调用,然后处理期望断言而不存根服务类?