预期行为
来自 {{./script/test}} 的任何失败都将导致非零退出码,并在摘要中某种形式的失败指示。
这并不意味着我们会快速失败,我们仍然会像目前一样运行所有可用目标环境。
实际行为
摘要确实报告了测试环境数量(例如,{{测试6个可能的js目标中的6个}}),但在摘要中并未提供关于这些环境中失败的指示。
也总是以0退出。
因为 {{./script/test}} 产生大量的输出,而失败被隐藏在这个输出中,所以在发生失败时很容易假设成功。
相关
CLJS-3098 - 此工作应与Windows上的Git Bash兼容
另见
{{./script/test-simple}}
分析
初步测试表明 {{./script/test-simple}} 没有运行,需要将 {{:main}} 添加到编译器选项中。
方法
- 将 {{./script/test}} 和 {{./script/test-simple}} 中的重复代码移动到共享的 {{./script/test-runner}}。
- 为每个测试目标生成一行摘要,传达通过、失败或跳过的状态。
- 在没有失败且至少有一个目标通过时(考虑目标跳过,如果并不是所有都跳过,则可以),退出码为0(成功);否则以1(失败)退出。
- 对关键输出着色,以便快速解析。
- 尊重 NO_COLOR (https://no-color.org/) 为不希望彩色输出的用户
截图
为了帮助审阅者,我包含了一些新摘要部分的截图。
成功
以下将返回退出状态0
!success.png(image
)success-with-skip.png!
使用 NO_COLOR
!success-nocolor.png!
失败
以下将返回退出状态1
!fail.png(image
)fail-with-success-and-skip.png(image
)fail-with-success.png(image
)fail-with-skip.png(image
)fail-skip.png!
实现注释
- 从
\!\#/bin/sh
切换到 \!\#/bin/env bash
以简化操作。我认为这不会引起争议,但认为值得提出。
- Windows {{script/test.ps1}} 并未作为本工作的部分考虑。
- 在Windows上的GraalVM上应用 CLSJ-3098 修复。
观察
- 持续集成不会运行 {{./script/test}}。作为补丁应用器,我希望知道我正在执行与CI相同的测试,但这将是另一张分离票的主题。
测试注释
在以下系统上脚本执行然后手动验证结果:
1. macOS Mojave
1. 通过本地Docker运行于linux
1. 通过ssh连接到本地Windows虚拟机上的Windows 10
脚本测试及其生成的日志已附在 cljs-3075...zip 文件中。这些脚本针对我的配置,但也包括了用于 Linux 的 Dockerfile。入口点是 {{verify.sh}}。
值得关注的是
1. 在测试中,将 CLJS-3098 {{bin/cljsc}} 和 {{bin/classpath_conv}} 应用于补丁版本,以支持 Windows 运行。副作用是,这也解决了由于 file.encoding 不是 utf-8 而在我的特定 Linux 安装上导致的测试失败。
1.在此补丁之前,{{script/test}} 在 Windows 上无法工作,并且直到应用 CLSJ-3098 之后,它仍然在 Windows 上无法工作。