预期的行为
{{./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 {{脚本/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上不起作用。