【问题标题】:How to generaet error in httpClient call in Angular?如何在 Angular 中的 httpClient 调用中生成错误?
【发布时间】:2021-02-15 00:37:56
【问题描述】:

我的 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) });
}

【问题讨论】:

  • 关于创建 HTTP 错误的任何想法?我还添加了 API 方法。

标签: javascript angular typescript subscription


【解决方案1】:

据我了解,您想在 '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();
    }

注意这一行: return BadRequest("未授权访问");

【讨论】:

  • "关于创建 HTTP 错误的任何想法?我还添加了 API 方法。"平台不对。它不在 Angular 中,您必须在 Angular 应用程序通信的地方进行。它可以是 c#、java 或 nodejs 后端 api。
【解决方案2】:

我假设您的 searchGetCall 是一个网络请求,它返回一个 observable。当您的网络请求返回 http 状态代码错误时,您的错误块将被执行。

【讨论】:

  • 如何创建它?
  • @ClintEastwood 这是一个例子希望对stackblitzreturn throwError("error");有帮助
【解决方案3】:

这不像try/catch。订阅错误块将取决于 HTTP 代码状态(403,404,500 等),而不是脚本执行错误。您的测试只是使您的脚本崩溃,而不是模拟 HTTP 错误代码。

【讨论】:

  • 非常感谢你们俩。如何模拟 HTTP 错误?我更改了 API url,但没有创建错误。模拟这个有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 2018-02-12
  • 2020-11-13
相关资源
最近更新 更多