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
by

评论者:[email protected]

v1,补丁和测试

0
...