进入 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 扫描的实际响应。
谢谢,蒂姆