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

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

0
测试

(is (not (<! ...))) 可以工作,但 (is (<! ...)) 不行。

在内 workings 中,is 以这种方式重写代码,使其调用 (apply <! ...),因为 is 假设assert-expr :default(链接:1),assert-predicate(链接:2)),它引发的 “在 (go ...) 块中使用 >!” 断言。
断言。

(链接: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 是一个广泛使用的核心库,这是合理的。它将解决本问题中描述的特定问题。
问题。

正确的解决方案是将 <! 和 >! 宏改为宏。

2 个回答

0

评论者:alexmiller

is 支持自定义表达式的多方法,因此我认为可以通过添加 <! 和 >! 的 assert-expr 方法来解决(可能在一个提供测试支持的核心异步命名空间中)。

0
...