2017-02-24 16 views
3

我正在尝试使用aws-sdk-mock的承诺支持编写一个单元测试。我正在使用DocumentClient。使用aws-sdk-mock的承诺支持与DocumentClient嘲弄

我的代码如下所示:

const docClient = new AWS.DynamoDB.DocumentClient(); 

const getItemPromise = docClient.get(params).promise(); 
    return getItemPromise.then((data) => { 
    console.log('Success'); 
    return data; 
}).catch((err) => { 
    console.log(err); 
}); 

我的模拟和单元测试是这样的:

const AWS = require('aws-sdk-mock'); 
AWS.Promise = Promise.Promise; 

AWS.mock('DynamoDB.DocumentClient', 'get', function (params, callback) 
{ 
    callback(null, { Item: { Key: 'test value } }); 
}); 

dynamoStore.getItems('tableName', 'idName', 'id').then((actualResponse) => { 
    // assertions 
    done(); 
}); 

捉迷藏我的单元测试,不回我的测试值,它实际上绕过我的模拟,并直接调用dynamoDb。我究竟做错了什么?我怎样才能让我的模拟设置正确?

+0

你找到一个解决的办法? – gouravtiwari21

+0

@ gouravtiwari21,不,我从来没有。 – JAck28

回答

4

目前还不清楚从你的代码,但AWS-SDK-模拟具有本说明

注意:在AWS服务需要在函数内部进行初始化以便进行测试的SDK方法被嘲笑

所以下面将无法正常嘲笑

var AWS  = require('aws-sdk'); 
var sns  = AWS.SNS(); 
var dynamoDb = AWS.DynamoDB(); 

exports.handler = function(event, context) { 
    // do something with the services e.g. sns.publish 
} 

但这将

var AWS = require('aws-sdk'); 

exports.handler = function(event, context) { 
    var sns  = AWS.SNS(); 
    var dynamoDb = AWS.DynamoDB(); 
    // do something with the services e.g. sns.publish 
} 

多看这里https://github.com/dwyl/aws-sdk-mock#how-usage

+0

另外,如果你在任何地方调用'AWS.restore',确保在promise已经解决并且测试完成后调用它。 – coderfin