【问题标题】:CodeBuild doesn't report failed testsCodeBuild 不报告失败的测试
【发布时间】:2020-12-12 16:10:05
【问题描述】:

我正在使用 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"

我的 package.json 中的 Jest 配置:

"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 以报告失败的测试,但在测试失败时仍阻止它继续构建?

【问题讨论】:

    标签: amazon-web-services unit-testing jestjs aws-codebuild


    【解决方案1】:

    在研究这一点时,我看到的所有使用 CodeBuild 测试报告的示例,测试都是作为 build 阶段的一部分运行的。

    由于您的测试处于pre_build 阶段,如果pre_build 失败,它将不会进入upload_artifacts 阶段,而只会跳到finalizingSee the CodeBuild phase transitions diagram for more information on this.

    我建议您遵循用户指南的模式并将您的测试置于build 阶段。

    用户指南参考:

    【讨论】:

    • 嗯,有趣。将我的测试移动到build 阶段的工作原理是,当测试失败时,构建会停止,但仍会运行生成和上传测试报告的post_build 阶段。 serverless tutorialexample 显示在 pre_build 中运行的测试,老实说,这是运行有意义的地方。
    • 我发现CodeBuild transitions 页面显示build 阶段之前的失败转到finalising,而build 期间的失败继续到post_build,这是上传报告和工件的地方.我猜想把它归结为另一个糟糕的 AWS 文档。
    • 我更新了我的答案以参考您找到的图表,我们都在学习! :)
    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    相关资源
    最近更新 更多