预期行为
从 {{./script/test}} 产生的任何失败都会导致非零退出代码,并在摘要中给出失败指示。
这并不意味着我们快速失败,我们仍然按照目前的方式运行所有可用的目标环境。
实际行为
摘要确实报告了测试的环境数量(例如,{{测试了6个可能的目标中的6个js}}),但未在摘要中说明这些环境中的失败。
但也总是退出为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}}。
- 将 CLSJ-3098 修复程序应用于 Windows 的 GraalVM。
观察
- 持续集成不运行 {{./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运行。副作用是这也解决了由于文件编码不是utf-8而在我的特定Linux安装上测试失败的问题。
1. 之前的此补丁之前,{{script/test}} 在Windows上不起作用,并且在应用CLSJ-3098之前它仍然将在Windows上不起作用。