1

进入 Jest 和单元测试 lambda 函数。我试图在我的单元测试中模拟 aws dynamodb-document 客户端扫描。我正在从真实数据库中取回实际扫描,所以我知道我的模拟程序不起作用。这是我的 .test.js:

var AWS = require('aws-sdk-mock');
const sinon = require('sinon');
let index = require('./index.js');


beforeEach(()=> {
    AWS.mock('DynamoDB.DocumentClient', 'scan', function(params, callback) {
        callback(null, {test: "value"});
    })
  });

  afterEach(()=> {
      AWS.restore();
  });

    it( 'test invocation', async() => {
        console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
      const result = await index.handler({}, {}, (err, result) => {
          expect(result).toEqual({test: "value"});
  });
  });

我的实际 lambda 函数代码如下所示:

'use strict';

var AWS = require("aws-sdk");
var DOC = require("dynamodb-doc");
AWS.config.update({region: "us-east-1"//,
    });
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
    TableName: "table-name",
    FilterExpression: "#PK = :cat_val",
    ExpressionAttributeNames: {"#PK": "PK",},
    ExpressionAttributeValues: { ":cat_val": "Value"}
};

exports.handler = (event, context, callback) => {
    var response; 
    
    docClient.scan(params, onScan);
    function onScan(err, data) {
        if (err) {
            response = {
                statusCode: 500,
                body: "Unable to complete scan.  Error JSON: " + JSON.stringify(err,null,2)
            }
        } else {
            data.Items.sort(compare);
            response = {
                statusCode: 200,
                body: data.Items
            }
        }

        callback(null, response);
        console.log(response);
    }
}

你们可以指出我的任何方向。测试在相等比较时失败,因为它具有来自 Dynamo 扫描的实际响应。

谢谢,蒂姆

4

0 回答 0