欢迎!有关如何使用本问答页面的更多信息,请参阅关于页面。
(is (not (<! ...))) 可以工作,但 (is (<! ...)) 不行。
(is (not (<! ...)))
(is (<! ...))
在内 workings 中,is 以这种方式重写代码,使其调用 (apply <! ...),因为 is 假设assert-expr :default(链接:1),assert-predicate(链接:2)),它引发的 “在 (go ...) 块中使用 >!” 断言。断言。
is
(apply <! ...)
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 能够识别特殊的 core.async 函数,并使用 assert-any 对这些进行处理。鉴于 core.async 是一个广泛使用的核心库,这是合理的。它将解决本问题中描述的特定问题。问题。
assert-expr
assert-any
正确的解决方案是将 <! 和 >! 宏改为宏。
评论者:alexmiller
is 支持自定义表达式的多方法,因此我认为可以通过添加 <! 和 >! 的 assert-expr 方法来解决(可能在一个提供测试支持的核心异步命名空间中)。