У меня есть асинхронная лямбда, которая выполняет асинхронный запрос sendMessage SQS. Очередь SQS - это стандартная очередь, а не FIFO, просто для пояснения.
Вот пример кода (без несоответствующей части логики):
exports.functionHandler = async (event, context, callback) => {
try {
let parsedBody = JSON.parse(event.Records[0].body);
let modifiedBody = await doStuff(parsedBody);
let sqsPayload = {
MessageBody: JSON.stringify(modifiedBody),
QueueUrl: my-queue-url
};
await sqs.sendMessage(sqsPayload).promise();
callback(null, utils.respondSuccess("Done"));
} catch (err) {
// Handle error
callback(null, utils.respondError(err));
}
};
const doStuff = async payload => {
// Do stuff
}
Довольно просто.
Теперь проблема: я пытаюсь протестировать эту функцию с помощью пакета aws-sdk-mock
. Вот как я заглушал функцию sendMessage, когда лямбда не была асинхронной, а функция sendMessage использовала обратный вызов:
it("an awesome title for my test", async () => {
let payload = {
Records: [
// Data here
]
};
AWS.mock("SQS", "sendMessage", (param, callback) => {
let response = {
ResponseMetadata: {
RequestId: "test-request-id"
},
MD5OfMessageBody: "a892e8d8589e97ca92fb70020f01c16c",
MessageId: "test-message-id"
};
callback(null, response);
});
await app.functionHandler(payload, {}, (err, result) => {
let parsedBody = JSON.parse(result.body);
expect(parsedBody.message).to.be.equal("Done");
// More stuff
});
AWS.restore();
});
Если я использую этот тест, функция sendMessage выдает следующую ошибку:
sendMessage returned an invalid MD5 response. Got "undefined", expecting "a892e8d8589e97ca92fb70020f01c16c".
Я не уверен, как проверить sendMessage асинхронно. Я не против принять другой пакет, если он поможет мне выполнить работу.
Может кто-нибудь помочь?
Большое спасибо