You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jest编写单元测试时如何正确处理异步RestError报错

问题根源

你遇到的问题由两个错误导致:

  1. async/await与done回调混用:Jest中如果测试用例使用async异步写法,不需要传入done参数,否则Jest会一直等待你手动调用done()才结束测试,你未调用done就会触发默认5000ms超时报错。
  2. 错误匹配逻辑错误:rejects.toEqual()比较的是完整的Error实例对象,你拿字符串/普通Error实例和RestError实例比较,必然不相等。

正确代码

直接移除done参数,匹配RestError的name和message属性即可:

jest.unmock('./utils.js');
describe('test', () => {
  it('test', async () => {
    await expect(getAPISecretKey('testKey')).rejects.toMatchObject({
      name: 'RestError',
      message: 'AKV10000: Request is missing a Bearer or PoP token.'
    });
  });
});

也可以直接用toThrow匹配错误内容:

it('test', async () => {
  await expect(getAPISecretKey('testKey')).rejects.toThrow('AKV10000: Request is missing a Bearer or PoP token.');
});

可选优化(推荐)

你当前的测试调用了真实的Azure Key Vault接口,会受网络/环境影响,建议mock掉第三方依赖,测试速度更快也更稳定:

// Mock Azure Key Vault SDK
jest.mock('@azure/keyvault-secrets', () => ({
  SecretClient: jest.fn().mockImplementation(() => ({
    getSecret: jest.fn().mockRejectedValue(
      Object.assign(new Error('AKV10000: Request is missing a Bearer or PoP token.'), {
        name: 'RestError'
      })
    )
  }))
}));

jest.unmock('./utils.js');
describe('test', () => {
  it('test', async () => {
    await expect(getAPISecretKey('testKey')).rejects.toMatchObject({
      name: 'RestError',
      message: 'AKV10000: Request is missing a Bearer or PoP token.'
    });
  });
});

内容的提问来源于stack exchange,提问作者SarangRN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:39:03