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

欢迎!有关如何使用本网站的更多信息,请参阅 关于 页面。

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


(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
...