Как запустить jest с помощью AWS Lambda?

#typescript #amazon-web-services #aws-lambda #serverless-framework #aws-code-deploy

Вопрос:

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

Это моя лямбда:

 export async function testLambda(event: APIGatewayEvent, context, callback) {
    console.log('The first version!')
    const response = {
        statusCode: 200,
        body: JSON.stringify({
            message: 'The first version!'
        })
    }
    return callback(null, response)
}
 

это мой почтовый крюк:

 export async function postHook(event, context, callback) {

    const deploymentId = event.DeploymentId;
    const lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId;
    console.log(`deploymentId: ${deploymentId} - lifecycleEventHookExecutionId: ${lifecycleEventHookExecutionId}`)
    try {
        const jest = require('jest');
        require('ts-jest');
        const options = {
        projects: [__dirname],
        silent: true,
        };

        await jest.runCLI(options, options.projects);
            // update aws deployment for sucsses
        } catch (err) {
            // update aws deployment for failure
            console.log(err);
            return { statusCode: 500 }
    }
}
 

мой тест написан на машинке, и я загрузил свой jest.config.js и tsconfig.json в zip-файл бессерверного приложения.
Независимо от того, что я делаю, глобальные символы шутки, такие как описание, ожидание и т. Д., Не распознаются:

Не удается найти имя «описать». Вам нужно установить определения типов для тестового запуска? Попробуйте npm i @types/jest или npm i @types/mocha , а затем добавьте jest или mocha в поле типы в вашем tsconfig.

Как я могу запустить свой тест с помощью aws lambda? единственный выбор, который у меня есть, — это либо запустить какую-либо другую задачу, такую как сборка кода, для запуска моего теста, либо изменить мою тестовую платформу на mocha. есть ли какое-нибудь лучшее решение?

Комментарии:

1. Разве эти сквозные тесты не должны выполняться за пределами Лямбды? Например, в вашем конвейере CI/CD? Как правило, вы развертываете свои лямбды, затем запускаете тесты в конвейере CI/CD, проверяете результаты и обрабатываете их в той или иной форме. Развертывание этого материала вместе с вашей Лямбдой кажется «неправильным» подходом.

2. Ошибки, похоже, возникают из-за проверки машинописи, вы пытались установить @types/jest типы? Пакеты типов помечают describe функции как доступные

Ответ №1:

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

 import { describe, test} from '@jest/globals';