Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建aws sdk_Javascript_Node.js_Sinon_Aws Sdk - Fatal编程技术网

Javascript 如何创建aws sdk

Javascript 如何创建aws sdk,javascript,node.js,sinon,aws-sdk,Javascript,Node.js,Sinon,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 = req

假设我有以下几点

// 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的好方法。我曾考虑使用来实现它,但我愿意接受其他库和建议。

我当前的解决方案是在sample.js中公开一个函数,如下所示

function overRide(data) {
  dynamoDB = data.dynamoDB;
}

if(process.env.NODE_ENV === 'test') {
  exports.overRide = overRide;
}
现在在我的测试用例中,我可以执行以下操作,这将使AWSAPI存根

//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});
我们已经创建了一个npm模块,它模拟了所有AWS SDK服务和方法

它真的很容易使用。只需使用服务、方法和存根函数调用AWS.mock

AWS.mock('DynamoDB', 'getItem', function(params, callback) {
    callback(null, 'success');
});
然后通过调用以下命令在测试后恢复方法:

AWS.restore('DynamoDB', 'getItem');
或者,要恢复它们,请致电:

AWS.restore();

我不知道如何根据传递的参数指定不同的响应。这是可能的吗?您得到了参数,所以请查看这些参数以确定要在回调中发送什么。该函数的主体不必是一个简单的回调(null,'success');