如何在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
相关产品推荐
相关产品推荐

