Javascript 如何在httpClient调用中生成错误?

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;

我的Angular应用程序中的搜索功能有以下方法,我想测试错误部分。但是,它不会命中错误块。它与订阅有关吗?或者,对于这种方法或方法,我应该使用什么

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。