如何将 onCall 与 aws-sdk-mock 一起使用?
How to use onCall with aws-sdk-mock?
我想让 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,所以我不知道我还能做些什么来解决 return 同一个方法被调用了多次的不同响应。
首先,设置要模拟的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
});
我想让 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,所以我不知道我还能做些什么来解决 return 同一个方法被调用了多次的不同响应。
首先,设置要模拟的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
});