Javascript 如何在httpClient调用中生成错误?
我的Angular应用程序中的搜索功能有以下方法,我想测试错误部分。但是,它不会命中错误块。它与订阅有关吗?或者,对于这种方法或方法,我应该使用什么Javascript 如何在httpClient调用中生成错误?,javascript,angular,typescript,subscription,Javascript,Angular,Typescript,Subscription,我的Angular应用程序中的搜索功能有以下方法,我想测试错误部分。但是,它不会命中错误块。它与订阅有关吗?或者,对于这种方法或方法,我应该使用什么 this.searchGetCall(text).subscribe((res) => { res = undefined; //test: added to create error console.log('res', res.constructor()); this.isSearching = false;
this.searchGetCall(text).subscribe((res) => {
res = undefined; //test: added to create error
console.log('res', res.constructor());
this.isSearching = false;
this.apiResponse = res;
}, (err) => {
debugger; //cannot hit this block
this.isSearching = false;
console.log('error', err);
});
searchGetCall(term: string) {
if (term === '') {
return of([]);
}
return this.httpClient.get('http://www.omdbapi.com/?s=' + term + '&apikey=' + APIKEY, { params: PARAMS.set('search', term) });
}
这不像
try/catch
。将根据HTTP代码状态(403404500等)而不是脚本执行错误到达订阅错误块。您的测试只是使脚本崩溃,而不是模拟HTTP错误代码。据我所知,您希望在“res=undefined”行抛出异常//测试:添加到“创建错误”。为此,请使用try-catch。(err)块用于http错误。
例如,在C#中,在操作结果中键入以下内容:
[HttpGet("Get/{id}")]
public async Task<ActionResult<UserDto>> Get(long id)
{
ServiceResult<IEnumerable<UserBo>> result = await serviceManager.User_Service.FindAsync(filterCriteria);
if (result.Success)
{
userBo = result.Data.FirstOrDefault();
if (userBo == null)
return NotFound();
else
{
ServiceResult<bool> resultAutorized = await GetAutorizedUserStatusById(userBo);
if (!resultAutorized.Success || !resultAutorized.Data)
return BadRequest("unauthorized access");
}
UserDto userDto = UserBo.ConvertToDto(userBo);
return userDto;
}
else
{
return BadRequest(result.Error);
}
.FirstOrDefaultAsync();
}
[HttpGet(“Get/{id}”)]
公共异步任务获取(长id)
{
ServiceResult结果=等待serviceManager.User\u Service.FindAsync(filterCriteria);
如果(结果、成功)
{
userBo=result.Data.FirstOrDefault();
if(userBo==null)
返回NotFound();
其他的
{
ServiceResult ResultAuthorized=等待GetAutorizedUserStatusById(userBo);
如果(!resultAuthorized.Success | |!resultAuthorized.Data)
返回请求(“未授权访问”);
}
UserDto UserDto=UserBo.converttoto(UserBo);
返回userDto;
}
其他的
{
返回错误请求(result.Error);
}
.FirstOrDefaultAsync();
}
注意线路:
返回请求(“未授权访问”) 我假设您的searchGetCall是一个web请求,它返回一个可观察的。当web请求返回http状态码错误时,将执行错误块。非常感谢你们两位。如何模拟HTTP错误?我更改了API url,但没有创建错误。有什么想法可以模拟它吗?我怎样才能创建它?@ClintEastwood这里有一个例子hope,它有助于
返回throwError(“错误”)代码>关于创建HTTP错误有什么想法吗?我还添加了API方法。“关于创建HTTP错误有什么想法吗?我还添加了API方法。”平台是错误的。它不是在Angular中,您必须在Angular应用程序通信的地方执行。它可以是c#、java或nodejs后端api。