代码之家  ›  专栏  ›  技术社区  ›  h_k

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

  •  3
  • h_k  · 技术社区  · 8 年前

    我在Alexa skill的lambda函数中有一个函数,我正在尝试使用 aws-lambda-mock-context 节点包。我尝试测试的方法包括调用DynamoDB来检查表中是否存在项。

    目前,我的测试立即失败 CredentialsError: Missing credentials in config . 下列的 this blog ,我尝试将我的Amazon IAM凭据手动输入到。aws/凭据文件。使用凭据进行测试会导致测试在超时之前运行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 回复  |  直到 8 年前
        1
  •  1
  •   FelixEnescu    8 年前

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

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

        2
  •  1
  •   Roshan Srivastava    8 年前

    如果您想进行单元测试,可以使用任何模拟库(如nock)模拟dynamo db端点,还可以检查应用程序对dynamo db端点的fiddler请求/响应,然后相应地进行故障排除。