首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在aws-sdk-mock中使用onCall?

如何在aws-sdk-mock中使用onCall?
EN

Stack Overflow用户
提问于 2018-06-04 18:54:09
回答 1查看 1.2K关注 0票数 1

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

我发现Sinon有onCall,它允许我像下面这样使用存根方法,

代码语言:javascript
复制
        let stubCall = sandbox.stub(Math, 'random');
        stubCall.onCall(0).returns(Promise.resolve(0));
        stubCall.onCall(1).returns(Promise.resolve(-1));

但我不知道如何让这个在AWS mock框架上像这样工作。

代码语言:javascript
复制
        AWS.mock('CloudFormation', 'describeStacks', Promise.resolve(stackResponse));

我试过了

代码语言:javascript
复制
AWS.mock('CloudFormation', 'describeStacks', Promise.resolve(stackResponse)).onCall(0).returns(Promise.resolve(res));

代码语言:javascript
复制
let mockCall = AWS.mock('CloudFormation', 'describeStacks', Promise.resolve(res));
mockCall.onCall(0).returns(Promise.resolve(res));

这两种方法都不起作用。

我找到了people discuss this issue,因为这个aws-mock使用了sinon,它应该能够使用onCall。有没有人用得很成功?

由于我使用promise,我不知道还能做些什么来返回不同的响应,因为同一个方法已经被调用了几次。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 06:24:32

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

代码语言:javascript
复制
const sinon = require('sinon');
const AWS_Mock = require('aws-sdk-mock');
const AWS_SDK = require('aws-sdk');

AWSMock.setSDKInstance(AWS_SDK);

配置将调用的存根

代码语言:javascript
复制
const stub = sinon.stub();
stub.onCall(0).returns(1);
stub.onCall(1).returns(2);

模拟服务方法

确保您模拟的是该方法的确切签名。

代码语言:javascript
复制
AWSMock.mock('CloudFormation', 'describeStacks', function(params, cb) {
  cb(null, stub());
});

我们的模拟方法的实际应用

代码语言:javascript
复制
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
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50678938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档