欢迎!请参阅关于 页面,了解更多关于如何工作的信息。
(is (not (<! ...))) 能够工作,但是 (is (<! ...)) 则不行。
(is (not (<! ...)))
(is (<! ...))
在底层,is 以一种方式重写代码,使其调用 (apply <! ...),因为 is 假设 <! 是一个普通函数(参见:assert-expr :default(链接:1),assert-predicate(链接:2) 在 clojure.test)。它触发了 “>! 在 (go ...) 块外使用” 的断言。断言。
is
(apply <! ...)
assert-expr :default
assert-predicate
(链接:1) -- https://github.com/clojure/clojure/blob/2e0c0a9a89ede8221504edeb90e8c4ee6cce7e16/src/clj/clojure/test.clj#L486(链接:2) -- https://github.com/clojure/clojure/blob/2e0c0a9a89ede8221504edeb90e8c4ee6cce7e16/src/clj/clojure/test.clj#L435
示例代码:https://gist.github.com/augustl/4a679dc95847db4434d0e7348651224f#file-test-cljs-L34宏展开:https://gist.github.com/amalloy/26ec8b8910c7c00bd7feaeef2307bc92#file-gistfile1-txt-L48
解决方案:使 assert-expr 能够识别特殊的核心异步函数,并使用 assert-any 为这些函数。由于核心异步是一个广泛使用的核心库,这是合理的。它会解决此问题中提到的特定问题。问题。
assert-expr
assert-any
正确的解决方案应是将 <! 和 >! 宏作为函数。
评论由:alexmiller 发布
is 支持自定义表达式的多重方法,因此我认为可以通过添加 assert-expr 方法在 <! 和 >! 上进行修补(可能在一个提供测试支持的核心异步命名空间中)。