如何存根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 };
我如何编写上面的代码示例的unit testing。
//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来实现它,但我向其他图书馆和build议敞开大门 。
我们创build了一个aws-sdk-mock npm模块来模拟所有的AWS SDK服务和方法。 https://github.com/dwyl/aws-sdk-mock
这很容易使用。 只需使用服务,方法和存根函数调用AWS.mock即可。
AWS.mock('DynamoDB', 'getItem', function(params, callback) { callback(null, 'success'); });
然后通过调用来恢复testing后的方法:
AWS.restore('DynamoDB', 'getItem');
或者还原他们所有的电话:
AWS.restore();
我目前的解决scheme是暴露sample.js中的函数,如下所示。
function overRide(data) { dynamoDB = data.dynamoDB; } if(process.env.NODE_ENV === 'test') { exports.overRide = overRide; }
现在在我的testing案例中,我可以做以下将存根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});
- 使用Node.js SDK构buildElastic Beanstalk
- 简单的aws-sdk为nodejs不工作
- 如何在我的情况下连接到elasticache?
- 为什么当指定的键不存在时,S3.deleteObject不会失败?
- 用AWS XRAY航行
- AWS IOT节点sdk为listThings和createThing提供了ResourceNotFoundException
- ValidationException:ExpressionAttributeValues不能为空
- 使用Express从S3stream文件,包括长度和文件types的信息
- Nodejs – 从另一个lambda函数中调用AWS.Lambda函数