Я использую NodeJ для лямбды aws и хочу уточнить, как правильно тестировать часть DynamoDb:
Лямбда-код:
const AWS = require('aws-sdk');
AWS.config.update({region: region});
const dynamoDb = new AWS.DynamoDB();
exports.handler = async function(event, context) {
...
await dynamoDb.deleteItem(item).promise();
}
Для тестов, которые я думал использовать mocha, sinon, chai and aws-sdk-mock
:
const expect = require('chai').expect;
const AWS = require('aws-sdk-mock');
const lambda = require('../index.js');
const sinon = require('sinon');
describe('Test', function () {
let deleteItemSpy;
beforeEach(function () {
deleteItemSpy = sinon.spy();
AWS.mock('DynamoDB', 'deleteItem', deleteItemSpy);
}
it('valid call', async function() {
await lambda.handler({"id":1}, null);
expect(deleteItemSpy.calledOnce).to.be.true;
})
});
Итак, есть две основные проблемы:
Mock не работает, если DynamoDb создается вне обработчика.Какие еще варианты у меня есть?Могу ли я использовать sinon.stub
как-нибудь?
Он выбрасывает тайм-аут, потому что await
никогда не получает результат от лямбды.Проблема связана с самой spy
.Я могу заменить его на: AWS.mock('DynamoDB', 'deleteItem', function (params, callback) { });