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?如果这样做并且你愿意接受 pull request,我很乐意看看。

谢谢

2 个回答

+1

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

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

如果将 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 中拉出的部分,或者最好是使用其他方法,并将测试重新适配到不同的框架中。

如果你对这个项目感兴趣并愿意提供帮助,我们将非常高兴。我们不使用pull request,但是我已经在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矩阵测试未运行,亚历克斯已修复了CI配置,现在这些矩阵测试运行正确。
嗨,我认为我可能未能满足贡献协议的资格。

不过,我已经完成了支持当前JDK 15和17的cljs测试套件以确保openjdk库的兼容性的工作。

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

因此,请随意使用其中的任何内容,无论是全部还是部分,无需引用我。

基本来说,通过对版本[15,17]使用条件配置,将nashorn作为外部Maven测试依赖项引入,在早期版本中则使用实例内的构建。

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

我还注意到一些clojure测试在 MS-Windows 上由于比较字符串和换行符而失败,所以我修复了这个问题。

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

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

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