如果 Karma 测试失败,如何防止 PowerShell 失败

How do I prevent PowerShell from failing if Karma has failed tests

问题

当我通过 PowerShell 为基线分支 运行 Karma 时,如果结果中有任何失败的测试,PowerShell 的反应方式与执行 Environment::Exit(1) 类似。这会导致 Jenkins 构建在没有 运行 其余组件的情况下过早失败。我想绕过这个,这样作业只有在出现合法问题时才会失败,当 运行ning 对目标分支(包含代码更改的分支)的业力时发现失败的测试,或者新行的代码覆盖率是低于最低要求。

背景

我正在与 Jenkins、PowerShell 和 Karma 合作,为 Web 应用程序提供代码覆盖率测试。在 Jenkins 中,我有一个执行 karma 的 PowerShell 任务:

在作业中,我正在检查两个分支(一个作为基线,另一个包含 code/test 更新)。我恢复所有 NuGet 包,然后构建基线分支的解决方案。接下来,我运行 karma 得到当前的覆盖率。然后,我为 Target Branch 构建解决方案,然后 运行ning Karma 获得代码覆盖率。使用 SonarQube,我正在比较结果以提供新的线路覆盖范围。

我已经尝试过的事情:

代码示例

& $nodePath $karmaPath start $karmaTest --log-level debug

$nodePath 只是 node.exe

的文件路径

$karmaPath 只是 karma

的文件路径

$karmaTest是karma.conf.ci.js文件的文件路径

失败的原因是返回的退出代码。 如果您 运行 在 Jenkins bash 脚本中执行命令,那么 Jenkins 会取消所有剩余任务。如果单元测试失败,您无论如何都不应该真正通过构建。 如果它们很脆弱,那么你最好重构测试。

要解决此问题,请在测试脚本 运行 之后通过管道传输命令。 例如

假设您在 package.json 中定义了脚本,大致定义如下

scripts:{
ng: ng;
install: npm install;
test-ci: ng test --karma-config karmaconfig --code-coverage
build: npm build
}

现在,通过使用 package.json.

中定义的脚本,您的 jenkins bash 脚本可能如下所示
npm run install
npm run test-ci || echo "Tests Failed"
npm run build