如何在Jasmine中测试SSM的getParameter方法?附代码报错问题
解决SSM getParameter模拟时的TypeError问题
这个问题很常见,核心原因是你模拟ssm.getParameter时返回的ssmParams是普通对象,但AWS SDK v2的getParameter方法调用后返回的是一个Request对象,这个对象自带.promise()方法。你直接返回普通对象,自然会出现Cannot read property 'promise' of undefined的报错。
下面是两种可行的解决方法:
方法一:模拟带有promise方法的返回对象
你需要让spy返回一个包含promise方法的对象,这个方法返回一个resolved的Promise,值就是你准备的模拟数据:
// 假设你用的是Jest测试框架 const mockSsmParams = { /* 你的模拟参数数据 */ }; spyOn(ssm, 'getParameter').and.returnValue({ promise: () => Promise.resolve(mockSsmParams) });
这样当你的业务代码调用.promise()时,就能正确拿到Promise并await它的结果。
方法二:优化原代码(可选但推荐)
另外注意到你的原代码里给getParameter传了回调函数,但同时又调用了.promise()——这其实是冗余的。AWS SDK v2中,当你使用.promise()时,不需要传入回调,回调是用于传统的异步回调模式的。你可以把代码简化成:
const ssmParameterData = await ssm.getParameter(params).promise();
这样代码更简洁,也不会影响后续的测试逻辑。
额外提示
如果你用的是AWS SDK v3,写法会不一样(v3本身返回Promise,不需要.promise()调用),但从你的报错和代码来看,应该是使用的v2版本,所以上面的方案完全适用。
内容的提问来源于stack exchange,提问作者dpatryas
相关产品推荐
相关产品推荐

