gpt4 book ai didi

javascript - 使用 callFake() 测试 HttpClient 调用

转载 作者:行者123 更新时间:2023-11-29 23:30:27 26 4
gpt4 key购买 nike

我正在尝试创建一个规范来测试我的 Angular 服务中发出 GET 请求的方法。我遇到的困难是模拟该方法以使其返回错误而不是响应。如果我无法让它返回错误(例如 400 或 500),我就无法提供完整的代码覆盖率...

正在测试的代码:

主网格服务.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() 方法,以便它进入错误 block 并调用 setError()logService.error() 方法。

最佳答案

尝试使用“spyOn()”并返回这样的抛出:

spyOn(httpClient, 'get').and.returnValue(Observable.throw({status: 404}));
//Observable.throw(new Error(`Error: ${error}`));

关于javascript - 使用 callFake() 测试 HttpClient 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47555506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com