2024 Clojure状态调查!分享你的想法。

欢迎!请参阅关于页面了解更多关于这个平台的信息。

0
测试
我们想在Clojure和ClojureScript之间运行相同的测试。然而,我们的一些CLJS测试是异步的,需要使用async宏。Clojure没有async宏,这使得测试的可移植性变得困难。如果我们添加async宏,至少有两条可能的途径:模仿cljs.test的async行为,或者复制实现。如果我们选择模仿行为,可以使用以下async宏。它创建一个承诺,运行主体,然后在承诺上阻塞,并在完成时传递承诺,允许测试继续。


(defmacro async
  [done & body]
  `(let [p# (promise)
         ~done #(deliver p# nil)]
     ~@body
     (deref p#)))


这的优点是它集成了Clojure中当前运行的测试方式,并且不需要任何周边工具了解异步测试。

模仿实现将非常具有侵略性。这可能意味着将run-tests的行为更改为返回nil,就像ClojureScript所做的那样,以及许多其他修改。这意味着很可能是一个不可行的方案。

我强烈倾向于第一种方案。

要回答“为什么我们需要这个,它只是一个无操作?”的问题,这是有用的,这样我们就可以在Clojure和ClojureScript中编写相同的测试。如果没有它,这会变得更加复杂。

2 答案

0

评论由:[email protected]

v1,修复和测试

0
...