#amazon-web-services #unit-testing #jestjs #aws-codebuild
#amazon-веб-сервисы #модульное тестирование #jestjs #aws-codebuild
Вопрос:
Я использую CodeBuild для создания моего проекта NPM. У меня есть группа отчетов, определенная в моей спецификации сборки, и я запускаю модульные тесты, используя Jest и npm test
команду.
Когда все тесты успешно пройдены, о них сообщается группе отчетов CodeBuild. Однако, если один из тестов завершается неудачей, я получаю сообщение об ошибке:
[Container] 2020/08/24 01:41:18 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: npm test -- --silent. Reason: exit status 1`
и сборка останавливается (что в целом нормально), но о неудачном тестировании не сообщается, поэтому частота прохождения теста остается на уровне 100%, а это значит, что я не вижу тенденций тестирования или других деталей.
Соответствующие части моего buildspec.yml:
version: 0.2
phases:
install:
commands:
- npm install
pre_build:
commands:
- npm test -- --silent
reports:
jest_reports:
files:
- 'test-results.xml'
file-format: JunitXml
base-directory: "reports/results"
Конфигурация Jest в моем package.json:
"jest": {
"reporters": [
"default",
[
"jest-junit",
{
"outputDirectory": "reports/results",
"outputName": "test-results.xml"
}
]
]
}
Заключительная часть журнала CodeBuild:
Test Suites: 1 failed, 8 passed, 9 total
Tests: 2 failed, 57 passed, 59 total
Snapshots: 0 total
Time: 3.034s
npm ERR! Test failed. See above for more details.
[Container] 2020/08/24 01:41:18 Command did not exit successfully npm test -- --silent exit status 1
[Container] 2020/08/24 01:41:18 Phase complete: PRE_BUILD State: FAILED
[Container] 2020/08/24 01:41:18 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: npm test -- --silent. Reason: exit status 1
Как я могу настроить CodeBuild так, чтобы он сообщал о неудачных тестах, но при этом не позволял ему продолжать сборку в случае сбоя теста?
Ответ №1:
При исследовании этого, во всех примерах, которые я вижу, которые используют отчеты о тестировании CodeBuild, тесты выполняются как часть build
фазы.
Поскольку ваши тесты находятся в pre_build
фазе, в случае pre_build
сбоя они не перейдут к upload_artifacts
фазе, а просто перейдут к finalizing
. Смотрите диаграмму фазовых переходов CodeBuild для получения дополнительной информации об этом.
Я бы рекомендовал следовать шаблонам из руководств пользователя и ввести ваши тесты в build
фазу.
Ссылки на руководство пользователя:
Комментарии:
1. Хм, интересно. Перевод моих тестов в
build
фазу работает так, что при сбое теста сборка останавливается, но по-прежнему выполняетсяpost_build
фаза, на которой генерируется и загружается отчет о тестировании. В бессерверном руководстве и в этом примере показаны тесты, выполняемые вpre_build
, которые, честно говоря, имеют смысл запускать.2. Я нашел страницу переходов к созданию кода, которая показывает, что сбои перед
build
фазой переходят кfinalising
, в то время как сбои во времяbuild
продолжаютсяpost_build
, на которую загружаются отчеты и артефакты. Я думаю, списать это на другую плохую документацию AWS.3. Я обновил свой ответ, чтобы ссылаться на найденную вами диаграмму, мы оба учимся ! 🙂