如何对包含dynamoDB查询的lambda函数进行单元测试

时间:2018-01-31 20:19:54

标签: unit-testing amazon-dynamodb alexa alexa-skills-kit alexa-skill

我在我的Alexa技能的lambda函数中有一个函数,我正在尝试使用aws-lambda-mock-context节点包进行单元测试。我试图测试的方法包括调用DynamoDB以检查我的表中是否存在某个项。

目前,我的测试立即以CredentialsError: Missing credentials in config失败。在this blog之后,我尝试将我的Amazon IAM凭据手动输入到.aws / credentials文件中。使用凭据进行测试会导致测试在超时之前运行30秒以上,而DynamoDB没有成功或失败的结果。我不知道从哪里开始。

我期待单元测试的功能如下:

helper.prototype.checkForItem = function(alexa) {
  var registration_id = 123;
  var params = {
    TableName: 'registrations',
    Key: {
      id: {"N" : registration_id}
    }
  };

  return this.getItemFromDB(params).then(function(data) {
    //...
  }

对DynamoDB的调用:

helper.prototype.getItemFromDB = function(params) {
  return new Promise(function(fulfill, reject) {
    dynamoDB.getItem(params, function(err, data) {
      if (err == null) {
        console.log("fulfilled");
        fulfill(data);
      }
      else {
        console.log("error recieving data " + err);
        reject(null);
      }
    });
  });
} 

2 个答案:

答案 0 :(得分:0)

如果你想进行单元测试你可以使用像nock这样的任何模拟库来模拟dynamo db端点,你也可以检查fiddler请求/响应你的应用程序对发电机数据库端点的影响,然后你可以进行故障排除。

答案 1 :(得分:0)

您可以使用SAM Local来测试lambda:

  

AWS SAM是一种快速简便的无服务器部署方式   应用程序,允许您编写简单的模板来描述您的   功能及其事件源(Amazon API Gateway,Amazon S3,   Kinesis,等等)。基于AWS SAM,SAM Local是AWS CLI工具   这为您提供了开发,测试和分析的环境   您的无服务器应用程序在本地上传之前   Lambda运行时。您是否在Linux,Mac或Microsoft上进行开发   在Windows中,您可以使用SAM Local创建本地测试环境   模拟AWS运行时环境。这样做有助于您解决   表现等问题。使用SAM Local也可以更快,   您的Lambda函数代码的迭代开发,因为没有   需要将应用程序包重新部署到AWS Lambda运行时。   有关更多信息,请参阅使用SAM构建简单应用程序   本地