AWS JavaScript Lambda тестирование с использованием Jest.

tl; dr: Импортировать обработчик, выполнить, проверить результат.

В последнее время моя бэкэнд-разработка была сосредоточена на бессерверных технологиях, в частности с использованием AWS Lambda.

Я хотел ускорить разработку за счет локального тестирования, поэтому я начал изучать варианты создания локальной среды выполнения лямбда-выражения.

Фреймворки, такие как Localstack и Serverless, можно использовать, но они были слишком тяжелыми и самоуверенными для того, что мне было нужно. Lambda-local выглядело многообещающе, но я обнаружил, что он запятнал возвращаемый объект дополнительными свойствами, что затрудняло утверждения.

Я начал создавать решение, используя child_process.fork(), но вскоре понял, что полностью переоцениваю простую истину:

Лямбды - это просто функции JavaScript.

Так почему бы просто не относиться к ним так же, как к любой другой функции?

Предположим, у нас есть лямбда, которая использует указанное имя с заглавной буквы и возвращает его:

Мы можем добавить сопутствующий файл capitalise.spec.js, который импортирует функцию и выполняет ее напрямую:

Да, тест использует локальную среду выполнения. Если это не соответствует предполагаемой среде выполнения лямбда-выражения, вы можете использовать nvm, чтобы либо изменить среду узла для проекта, либо переключить среду узла для тестирования:

Это по существу имитирует производственный процесс выполнения лямбда-выражения и обеспечивает простой способ использования инструментов тестирования, с которыми вы уже знакомы (в моем случае Jest), для локального тестирования ваших лямбда-выражений перед развертыванием.

Не забывайте, что ваши лямбда-выражения должны быть упакованы со всеми их зависимостями (node_modules) перед развертыванием. Итак, вам нужно иметь каждую лямбда-выражение в собственном каталоге с собственным package.json (и / или использовать слои лямбда для управления зависимостями).