[英]How to mock a service call in a function in angular unit testing?
我正在尝试为以下功能编写测试用例:
foo = () => {
this.someService.getDetails({key:'value'}).subscribe(details => {
//do stuff
this.someService.getMoreDetails().subscribe(moreDetails => {
//do stuff
});
});
}
该服务如下所示:
getDetails = (args) :Observable<any> {
return this.http.post<any>(//calls)
}
// similar for getMoreDetails
我编写的测试文件如下所示:
const someServiceStub = jasmine.createSpyObj('someService', ['getDetails', 'getMoreDetails']);
...
...
it('should called getMoreDetails', () => {
component.foo();
fixture.detectChanges();
someServiceStub.getDetails.and.returnValue(Observable.of
({ Details: 'Tired of giving you details'})
);
expect(someServiceStub.getMoreDetails).toHaveBeenCalled();
});
但是,我的测试用例未能给出错误“无法读取未定义的属性订阅”(对于foo函数中的第一行)。
我也尝试过使用模拟服务类,但出现相同的错误。 可能的原因是什么,我该如何解决?
首先调用foo()
函数,该函数调用服务的getDetails()
方法。 此方法是间谍,您从未告诉过间谍该返回什么,因此它返回的是undefined。
然后,您告诉间谍返回什么。 为时已晚:已经进行了服务呼叫。 在调用foo()
之前,告诉间谍返回什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.