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

TypeScript下如何用Sinon stub返回AWSError测试DynamoDB查询分支

配置方法

你需要让Sinon stub的query方法返回包含promise方法的对象,且promise方法resolve的结果符合你业务代码中判断的PromiseResult结构,包含带error字段的$response属性,完整测试代码如下:

it('With error @ query', async () => {
  // 构造模拟的AWSError对象,可按需填充错误字段
  const mockAWSError = {
    code: 'InternalServerError',
    message: 'DynamoDB query failed',
    statusCode: 500,
    retryable: true
  };
  // 构造符合PromiseResult结构的返回值
  const mockQueryResult = {
    $response: {
      error: mockAWSError
    }
  };
  // 配置stub:调用query返回带promise方法的对象,promise resolve上述模拟结果
  const errorStub = Sinon.stub(AWS.DynamoDB.DocumentClient.prototype, 'query')
    .returns({
      promise: () => Promise.resolve(mockQueryResult)
    });

  const input: User = {
    Email: "pleaseneverregisteruserwiththisemail@gmail.com"
  };
  // 注意:你的业务逻辑中查询出错时返回true,这里需要把expectedOutput修改为true
  const expectedOutput: boolean = true;
  const output = await checkIfUserExist(input);

  expect(output).to.equal(expectedOutput);
  expect(errorStub.calledOnce).true;
  Sinon.restore();
})

补充说明

如果你的AWS SDK默认是查询出错时promise()直接reject错误(绝大多数场景下的默认行为),你原有业务代码没有加try/catch包裹await语句会直接抛出异常导致测试失败,此时有两种处理方案:

  • 修改业务代码,给查询逻辑加try/catch,捕获错误后走对应返回逻辑
  • 将stub的promise改为reject,同时在测试中捕获异常做对应断言,适配你的业务逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:09:03