【发布时间】:2017-11-29 14:47:24
【问题描述】:
我正在尝试创建一个规范来测试我的 Angular 服务中发出 GET 请求的方法。我遇到的困难是嘲笑该方法以使其返回错误而不是响应。如果我无法让它返回错误(例如 400 或 500),我将无法提供完整的代码覆盖率......
正在测试的代码:
maingrid.service.ts:
async loadAccountListPromise(id: string) {
let queryParams = `?emailAddress=${id}`;
let promise = new Promise((resolve, reject) => {
this.http.get(`${this.baseUrl}` + queryParams, { responseType: 'json' })
.toPromise()
.then(
(data) => {
this.results = this.formatData(data);
resolve(this.results);
},
(err) => {
this.logService.error('loadAccountListPromise() exception:', err);
this.setError(this.message[0], err);
reject('loadAccountListPromise() exception');
}
);
});
return promise;
}
setError(errorMessage: string, errorCode?: string): void {
this._error.next(new NxpError(errorMessage, 'AccountListService',
errorCode));
}
clearError(): void {
this._error.next(null);
}
这是我尝试编写的规范,用于使用 callFake() 模拟该方法:
maingrid.service.spec.ts
it('logs and sets a local error for system errors/exceptions', () => {
let id: string = 'ppandya@pershing.com';
let myUrl = 'https://localhost:9999/...';
let queryParams = `?emailAddress=${id}`;
spyOn(httpClient, 'get').and.callFake( loadAccountListPromise( (response) => {
// need to return error here...somehow
}));
spyOn(logService, 'error');
spyOn(maingridService, 'setError');
maingridService.loadAccountListPromise(id);
let request = httpMock.expectOne(myUrl + queryParams);
expect(request.request.method).toEqual('GET');
httpMock.verify();
expect(logService.error).toHaveBeenCalled();
expect(maingridService.setError).toHaveBeenCalled();
});
我不确定我需要做什么才能正确模拟 loadAcountListPromise() 方法,以便它进入错误块并调用 setError() 和 logService.error() 方法。
【问题讨论】:
标签: javascript angular unit-testing jasmine httpclient