我想让mock方法为对同一方法的连续调用启用不同的响应。
我发现Sinon有onCall,它允许我像下面这样使用存根方法,
let stubCall = sandbox.stub(Math, 'random');
stubCall.onCall(0).returns(Promise.resolve(0));
stubCall.onCall(1).returns(Promise.resolve(-1));但我不知道如何让这个在AWS mock框架上像这样工作。
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));这两种方法都不起作用。
我找到了people discuss this issue,因为这个aws-mock使用了sinon,它应该能够使用onCall。有没有人用得很成功?
由于我使用promise,我不知道还能做些什么来返回不同的响应,因为同一个方法已经被调用了几次。
发布于 2018-06-05 06:24:32
首先,将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
});https://stackoverflow.com/questions/50678938
复制相似问题