2024 年 Clojure 状况调查! 中分享您的想法。

欢迎!请查看 关于 页面,了解更多关于如何工作的信息。

0
测试

你好,

clojure/data.xml 测试套件在 JDK 17 上无法运行,出现以下错误

$ lein test
Exception in thread "main" Syntax error compiling at (clojure/data/xml/cljs_repls.clj:11:5).
	at clojure.lang.Compiler.analyze(Compiler.java:6808)
	...
	at clojure.main.main(main.java:37)
Caused by: java.lang.RuntimeException: No such var: repl-nh/eval-resource
	at clojure.lang.Util.runtimeException(Util.java:221)
	at clojure.lang.Compiler.resolveIn(Compiler.java:7387)
	at clojure.lang.Compiler.resolve(Compiler.java:7357)
	at clojure.lang.Compiler.analyzeSymbol(Compiler.java:7318)
	at clojure.lang.Compiler.analyze(Compiler.java:6768)
	... 67 more
Tests failed.

这是因为 ClojureScript 测试在 Nashorn JS 引擎之上运行,但从 JDK 15 以后,后者已被移除。

是否有计划直接从 ClojureScript 运行测试,也许像 core.async 一样使用 deps.edn?如果有需要,我很乐意查看,如果你对 PR 开放。

谢谢

2 个答案

+1

Leiningen 不会用于构建/测试任何 Contrib 库。一些维护者已经添加了 project.clj 以方便自己,但这不是官方基础设施(一些维护者已经添加了 deps.edn,这也不是官方的)。

官方基础设施使用 Maven(并且 mvn test 通过了测试,但看起来为 data.xml 没有建立太多的 JDK 测试矩阵)。当前 pom.xml 指定了 Clojure 版本 1.7.0,这意味着 ClojureScript 测试会跳过,无论 JDK 版本如何。

如果将 pom.xml 更新到,比如说,Clojure 1.9.0,那么测试将在 JDK 17 上失败(正如你观察到的)。

如果在这次 Contrib 的测试中有一个更完整的 Clojure 版本和 JDK 版本矩阵将很棒。

明白了,谢谢。为了我的参考,这个 contrib 包使用 https://github.com/clojure/build.poms 作为它们的父 POM。

关于如何在测试中构建版本矩阵有什么想法吗?
我不确定为什么它没有自动运行测试矩阵。这方面不需要太多的设置,因为这是由 CI 系统本身处理的。build.ci 项目指定了应使用的 Clojure 和 JDK 版本以及支持的 Clojure 的最低版本。

看起来有几个项目矩阵测试目前运行不正常(我刚刚检查了 java.jdbc),所以现在 CI 上可能有问题。
+1

这个项目实际上并不使用 Leiningen 来运行项目测试——在官方构建中运行的是 Maven 构建(mvn clean test)。

不过这样运行也会遇到同样的(多个)问题。只测试 Java 8 的逻辑是错误的,因为 JDK > 8,并且只会尝试在 Java 8 上运行测试。它与一个非常旧的 ClojureScript 版本有关,而新版本已经删除了许多测试套件依赖的 Nashorn repl 东西,所以使用最新的 ClojureScript 也不会工作。

我理想中想要的是我们目前在 core.async 中没有的东西(它将构建分成一个无法在发布时的构建箱上自动运行的片段),而是要修复我们目前在 clojure.xml 中做到的事情,以继续在基于 Maven 的构建中工作。存在可以使用的 OpenJDK Nashorn 构建,因此 Nashorn 也不会造成真正的问题。我不太明白 CLJS 测试东西是否值得这样做并解决从 cljs repl 中拉出来的部分,或者最好是使用其他东西并将测试重新适配到不同的框架中。

如果您对此感兴趣并愿意提供帮助,我将非常高兴。我们不使用PR,但我已经在 https://clojure.atlassian.net/browse/DXML-67 创建了一个Jira任务,您可以签署贡献协议并请求访问Jira以提供补丁。请参阅 https://clojure.org/dev/dev#_becoming_a_contributor

我会看看,谢谢!

(data.xml-test-matrix现在正确显示了JDK17测试失败 https://build.clojure.org/view/Contrib/job/data.xml-test-matrix/lastBuild/。我猜这是因为 CI 配置更新造成的。
是的,我在 clojure-dev 通道上提过,一些 CI 矩阵测试没有运行,Alex 修复了 CI 配置,所以这些矩阵测试现在可以正确运行了。
嗨,我想我可能没有达到贡献协议的资格标准。

不过,我已经为在 JDK 15 和 17 上使用 openjdk 库支持当前 cljs 测试套件完成了工作

https://github.com/ikappaki/data.xml/compare/master..ikappaki:issue/cljs-tests

因此,请随意使用其全部或部分内容,无需引用我。

基本上,nashorn 作为外部 Maven 测试依赖项被引入,通过配置条件在 JDK 版本 [15,17] 中使用,否则在较早版本中使用实例构建。

我还决定从 ClojureScript 代码库中复制 cljs.repl.nashorn 文件并更新为 openjdk nashorn,这不仅是为了支持测试(即使没有它也很容易修复),而是为了维护用于开发的 cljs repl 功能。

我还注意到一些 clojure 测试在 MS-Windows 上因比较带有换行符的字符串而失败,所以我修复了这一点。

我已确认现在所有测试都在 openjJDK 8、11、15 和 17 上成功运行,所以这至少是一个很好的起点,在保留现有功能的同时仅进行了最小的更改。

接下来,我想问您要升级哪些clojure(script)依赖项,然后评估其他可能的解决方案,如使用graalvm运行cljs测试。

希望这能帮到您!
谢谢
...