Man*_*dar 2 jestjs ssm aws-sdk-nodejs aws-sdk-mock aws-parameter-store
我尝试使用 aws-sdk-mock 和下面的代码来模拟 AWS SSM,但不起作用。不抛出错误,从实际存储中获取值getParametersByPath调用时从实际存储中获取值。
我查看了 aws-sdk-mock 文档,但似乎没有模拟 ssm 的示例,是否支持。
AWSMock.mock('SSM', 'getParametersByPath', (params, callback) => {
callback(null, mockResponse);
});
Run Code Online (Sandbox Code Playgroud)
我在尝试执行类似操作时遇到了此问题:当尝试模拟 SSM 功能时,资源仍在尝试向 AWS 发出请求,并且没有使用模拟功能。
例子:
import { mock } from 'aws-sdk-mock';
import { SSM } from 'aws-sdk';
import { GetParameterRequest, GetParameterResult } from 'aws-sdk/clients/ssm';
import 'mocha'
...
const ssm: SSM = new SSM();
mock('SSM', 'getParameter', async (request: GetParameterRequest) => {
return { Parameter: { Value: 'value' } } as GetParameterResult;
})
const request: GetParameterRequest = { Name: 'parameter', WithDecryption: true};
const result: GetParameterResult = await ssm.getParameter(request).promise();
expect(result.Parameter.Value).to.equal('value');
...
Run Code Online (Sandbox Code Playgroud)
调用时发生错误getParameter。
事实证明,我们错误的原因是我们在声明模拟之前实例化了集成。因此,解决方法是在实例化集成之前切换执行顺序并声明模拟。
例子:
import { mock } from 'aws-sdk-mock';
import { SSM } from 'aws-sdk';
import { GetParameterRequest, GetParameterResult } from 'aws-sdk/clients/ssm';
import 'mocha'
...
mock('SSM', 'getParameter', async (request: GetParameterRequest) => {
return { Parameter: { Value: 'value' } } as GetParameterResult;
});
// -> Note the following line was moved below the mock declaration.
const ssm: SSM = new SSM();
const request: GetParameterRequest = { Name: 'parameter', WithDecryption: true};
const result: GetParameterResult = await ssm.getParameter(request).promise();
expect(result.Parameter.Value).to.equal('value');
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5708 次 |
| 最近记录: |