2

我正在尝试使用 aws-sdk-mock 和下面的代码来模拟 AWS SSM,但无法正常工作。不抛出错误,getParametersByPath调用时从实际存储中获取值。

我查看了 aws-sdk-mock 文档,但似乎没有模拟 ssm 的示例,它是否支持。

AWSMock.mock('SSM', 'getParametersByPath', (params, callback) => {
  callback(null, mockResponse);
});
4

1 回答 1

2

我在尝试执行类似操作时遇到了这个问题:尝试模拟 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');
    ...

调用 时发生错误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');
    ...

于 2020-01-23T21:08:13.177 回答