Jest - 测试 httpClient 拒绝承诺

Jest - testing httpClient rejected promise

我有一个 Nest.js 应用程序,我正在尝试测试一个具有简单 httpClient 请求的方法,但我找不到从我的代码中测试 catch 块的方法。

  async getUser(): Promise<any> {
    try {
      return lastValueFrom(
        this.httpService.get('https://external.url')
        }).pipe(map(response => response.data))
      )
    } catch (error) {
      throw Error(error)
    }
  }

这是我的承诺得到实现和测试的区块

  it('testing success', async () => {
    const result: AxiosResponse = {
      data: {},
      headers: {},
      config: {},
      status: 200,
      statusText: 'OK',
    }

    jest.spyOn(httpService, 'get').mockImplementationOnce(() => of(result))
    const response = mockSuccessRespose
    expect(await service.getUser()).toEqual(response)
  })

现在我正在尝试使用拒绝条件对其进行测试

  it('testing exception', async () => {
   jest.spyOn(httpService, 'get').mockReturnValue(throwError(() => Error('error')))
    await expect(service.getUser()).rejects.toThrow('error')
  })

如果我 运行 最后一个测试通过,但如果我 运行 开玩笑覆盖 'throw Error(error)' 行永远不会被调用。

您不是在等待 try-catch 块中的承诺结果,因此未捕获异常。正确的版本是:

async getUser(): Promise<any> {
  try {
    return await lastValueFrom(
      this.httpService.get('https://external.url').pipe(map(response => response.data))
    );
  } catch (error) {
    throw Error(error)
  }
}