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

如何在Vitest中Mock S3Client构造函数使其抛出异常

解决Vitest中Mock S3Client构造函数抛出异常的问题

你之前修改S3Client.prototype.constructor的方法无效,因为实例化对象时调用的是构造函数本身,而非原型链上的constructor属性。正确的做法是直接替换模块导出的S3Client构造函数:

vi.mock('@aws-sdk/client-s3', async () => {
  // 导入实际模块以保留其他导出内容
  const actual = await vi.importActual<typeof import('@aws-sdk/client-s3')>('@aws-sdk/client-s3');
  
  return {
    ...actual,
    // 直接替换S3Client构造函数,实例化时抛出错误
    S3Client: function () {
      throw new Error("Can't construct S3Client");
    }
  };
});

如果使用TypeScript需要保证类型兼容性,可添加类型断言:

vi.mock('@aws-sdk/client-s3', async () => {
  const actual = await vi.importActual<typeof import('@aws-sdk/client-s3')>('@aws-sdk/client-s3');
  
  return {
    ...actual,
    S3Client: function () {
      throw new Error("Can't construct S3Client");
    } as typeof actual.S3Client
  };
});

这样在测试代码中执行new S3Client()时,就会直接触发自定义错误,满足构造失败的测试场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:37:25