2024 Clojure 状态调查中分享您的想法!

欢迎!请参阅关于页面以了解更多有关此工作方式的信息。

0 投票
测试

你好,

clojure/data.xml 测试套件在遇到以下错误时无法运行:

$ 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 不用于构建/测试任何 contributed 库。一些维护者已为个人便利性添加了 project.clj,但这不是官方基础设施(一些维护者已添加 deps.edn,这也不是官方的)。

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

如果将 pom.xml 更新为,例如,Clojure 1.9.0,那么在 JDK 17 上运行测试会失败(正如你所观察到的)。

如果在这个 Contrib 的测试中有更多的 Clojure 版本和 JDK 版本矩阵,那就太好了。

我明白了,谢谢。为了我的参考,贡献包使用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的构建中继续工作。有可以使用Nashorn的OpenJDK构建,因此Nashorn也不是真正的问题。我对CLJS测试的东西不足以知道是否值得那样去做以及解决从CLJS repl抽出的部分,或者是否更好的选择是使用别的东西并将测试重新构建到一个不同的框架中。

如果您有兴趣参与这项工作,我将很乐意在这方面获得帮助。我们不使用PR,但我已在https://clojure.atlassian.net/browse/DXML-67上创建了一个jira,您可以签署贡献者协议并请求访问jira提供补丁。https://clojure.org/dev/dev#_becoming_a_contributor

by
我会看看,谢谢!

(现在正确的 data.xml-test-matrix 展示了 JDK17 失败 https://build.clojure.org/view/Contrib/job/data.xml-test-matrix/lastBuild/。我猜测这是由于 CI 配置更新造成的)。
by
是的,我在 clojure-dev 频道提到过某些 CI 矩阵测试没有运行,亚历克斯修复了 CI 配置,因此这些矩阵测试现在运行正确。
by
嗨,我觉得我可能没有满足贡献协议的资格条件。

尽管我已完成了在 JDK 15 和 17 上使用 openjdk 库支持当前 cljs 测试套件的工作

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

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

基本上,nashorn 被作为 JDK 版本 [15,17] 的外部 maven 测试依赖项引入,通过 on 配置条件,否则构建实例将像早期版本一样使用。

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

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

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

接下来的我打算问你 clojure(script) 依赖项升级到哪个版本,然后评估其他可能的解决方案,如 graalvm 运行 cljs 测试。

希望这有助于!
谢谢
...