期望的行为
来自{{./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(图像
)success-with-skip.png!
在NO_COLOR下
!success-nocolor.png!
失败
以下将返回退出状态1
!fail.png(图像
)fail-with-success-and-skip.png(图像
)fail-with-success.png(图像
)fail-with-skip.png(图像
)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 运行。副作用是这也解决了我特定安装的 Linux 上的测试失败问题,因为文件编码不是 utf-8。
1. 在此补丁之前,{{script/test}} 无法在 Windows 上工作,并且在使用 CLSJ-3098 之前它仍将无法在 Windows 上工作。