angular 7服务的Jasmine测试返回一个Promise对象,没有反映在代码覆盖率中。
@Injectable()
export class MyService {
constructor(private http:HttpClient,private httpService: HttpService) {
}
getAllRecords (requestData: MyRequest): Promise<MyResponse> {
return new Promise((resolve, reject) => {
let url:string = `${ApiUrl.getUrl}`;
this.httpService.makeHttpGetRequest(url, requestData)
.subscribe((response) => {
resolve(response.body);
}, (error) => {
reject();
});
});
}
}测试
describe('MyService', function () {
let myService: MyService;
it('getAllRecords should have been called and return all records', (done) => {
const spy = spyOn(myService, 'getAllRecords').and.returnValue(Promise.resolve({ id: 1 }));
myService.getAllRecords(null);
spy.calls.mostRecent().returnValue.then(() => {
expect(myService.getAllRecords).toHaveBeenCalledWith(null);
done();
});
})
})测试正在通过,但没有反映在使用伊斯坦布尔创建的代码覆盖率报告中,注释测试没有反映代码覆盖率百分比。
发布于 2019-01-20 10:41:48
当您声明以下内容时,您正在截断该方法:
const spy = spyOn(myService, 'getAllRecords').and.returnValue(Promise.resolve({ id: 1 }));该方法本身永远不会进入,因为您的spy代表它返回了一个不同的值。
我建议您不要在myService.getAllRecords()上设置间谍,而是在httpService.makeHttpGetRequest()上设置一个间谍,并返回一个冷的可观察对象,该对象立即以不同的值结束,以测试快乐路径和错误情况。
https://stackoverflow.com/questions/54268699
复制相似问题