如何存根aws-sdk
How to stub aws-sdk
假设我有以下内容
// file sample.js
var aws = require('aws-sdk');
var dynamoDB = new aws.DynamoDB();
exports.processData = function(){
var data = dynamoDB.getItem(params);
// so something with data
};
如何为上述代码示例编写单元测试。
//file sample_test.js
var aws = require('aws-sdk');
var sinon = require('sinon');
// the following code doesnt seem to stub the function
// the actual function is still used in sample.js
var getItemStub = sinon.stub();
aws.DynamoDB.prototype.getItem = getItemStub;
var sample = require('./sample');
存根 aws-sdk 的好方法是什么 api。我正在考虑使用 SinonJS 来实现它,但我对其他库和建议持开放态度。
我目前的解决方案是在 sample.js 中公开一个函数,如下所示。
function overRide(data) {
dynamoDB = data.dynamoDB;
}
if(process.env.NODE_ENV === 'test') {
exports.overRide = overRide;
}
现在在我的测试用例中,我可以执行以下操作,这将存根 aws api。
//file sample_test.js
var aws = require('aws-sdk');
var sinon = require('sinon');
var sample = require('./sample');
var ddb = new aws.DynamoDB();
ddb.getItem = sinon.stub();
sample.overRideAWS({dynamoDB: ddb});
我们创建了一个aws-sdk-mock npm module which mocks out all the AWS SDK services and methods. https://github.com/dwyl/aws-sdk-mock
真的好用。只需使用服务、方法和存根函数调用 AWS.mock。
AWS.mock('DynamoDB', 'getItem', function(params, callback) {
callback(null, 'success');
});
然后在测试后通过调用恢复方法:
AWS.restore('DynamoDB', 'getItem');
或者要恢复它们,请调用:
AWS.restore();
假设我有以下内容
// file sample.js
var aws = require('aws-sdk');
var dynamoDB = new aws.DynamoDB();
exports.processData = function(){
var data = dynamoDB.getItem(params);
// so something with data
};
如何为上述代码示例编写单元测试。
//file sample_test.js
var aws = require('aws-sdk');
var sinon = require('sinon');
// the following code doesnt seem to stub the function
// the actual function is still used in sample.js
var getItemStub = sinon.stub();
aws.DynamoDB.prototype.getItem = getItemStub;
var sample = require('./sample');
存根 aws-sdk 的好方法是什么 api。我正在考虑使用 SinonJS 来实现它,但我对其他库和建议持开放态度。
我目前的解决方案是在 sample.js 中公开一个函数,如下所示。
function overRide(data) {
dynamoDB = data.dynamoDB;
}
if(process.env.NODE_ENV === 'test') {
exports.overRide = overRide;
}
现在在我的测试用例中,我可以执行以下操作,这将存根 aws api。
//file sample_test.js
var aws = require('aws-sdk');
var sinon = require('sinon');
var sample = require('./sample');
var ddb = new aws.DynamoDB();
ddb.getItem = sinon.stub();
sample.overRideAWS({dynamoDB: ddb});
我们创建了一个aws-sdk-mock npm module which mocks out all the AWS SDK services and methods. https://github.com/dwyl/aws-sdk-mock
真的好用。只需使用服务、方法和存根函数调用 AWS.mock。
AWS.mock('DynamoDB', 'getItem', function(params, callback) {
callback(null, 'success');
});
然后在测试后通过调用恢复方法:
AWS.restore('DynamoDB', 'getItem');
或者要恢复它们,请调用:
AWS.restore();