CodeBuild не сообщает о неудачных тестах

#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. Я обновил свой ответ, чтобы ссылаться на найденную вами диаграмму, мы оба учимся ! 🙂