【问题标题】:How to use onCall with aws-sdk-mock?如何将 onCall 与 aws-sdk-mock 一起使用?
【发布时间】:2018-06-04 10:54:08
【问题描述】:

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

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

        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。有人使用成功吗?

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

【问题讨论】:

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


    【解决方案1】:

    首先,设置要模拟的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());
    });
    

    我们的模拟方法在行动

    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
    });
    

    【讨论】:

    • 你能用不同的参数对同一个方法进行多个模拟吗?假设我想使用一个带有一个参数多次调用的模拟。然后还有一个模拟,用另一个参数处理其他请求。
    • 当然。查看withArgscallsFake 函数sinonjs.org/releases/latest/stubs
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多