如何使用带有aws-sdk-mock的onCall?

时间:2018-06-04 10:54:09

标签: amazon-web-services mocking mocha sinon chai

我想让mock方法为连续调用同一方法启用不同的响应。

我发现Sinon有onCall,它允许我可以使用下面的stub方法,

        let stubCall = sandbox.stub(Math, 'random');
        stubCall.onCall(0).returns(Promise.resolve(0));
        stubCall.onCall(1).returns(Promise.resolve(-1));

但我不知道如何在AWS模拟框架上运行这样的工作。

        AWS.mock('CloudFormation', 'describeStacks', Promise.resolve(stackResponse));

我试过

AWS.mock('CloudFormation', 'describeStacks', Promise.resolve(stackResponse)).onCall(0).returns(Promise.resolve(res));

let mockCall = AWS.mock('CloudFormation', 'describeStacks', Promise.resolve(res));
mockCall.onCall(0).returns(Promise.resolve(res));

他们两个都没有工作。

我发现人们discuss this issue,因为这个aws-mock使用了sinon,它应该能够使用onCall。有人成功使用它吗?

由于我使用了承诺,我不知道还能做些什么来返回相同方法的不同响应已被多次调用。

1 个答案:

答案 0 :(得分:3)

首先,将AWS SDK实例设置为模拟

const sinon = require('sinon');
const AWS_Mock = require('aws-sdk-mock');
const AWS_SDK = require('aws-sdk');

AWSMock.setSDKInstance(AWS_SDK);

配置将被调用的存根

const stub = sinon.stub();
stub.onCall(0).returns(1);
stub.onCall(1).returns(2);

模拟服务方法

确保您正在嘲笑该方法的确切签名。

AWSMock.mock('CloudFormation', 'describeStacks', function(params, cb) {
  cb(null, stub());
});

我们采用的Mocked方法

const cf = new AWS_SDK.CloudFormation();

cf.describeStacks({}, (err, data) => {
  if(err) {
    console.err(err);
  }
  console.log(data); // 1
});

cf.describeStacks({}, (err, data) => {
  if (err) {
    console.err(err);
  }
  console.log(data); // 2
});