在尝试手动连接 clojure.test 和 spec 到 fdef'd 函数时,我意识到 spec.test/check 在失败的测试中返回一个包含(链接::failure false)的映射。我(几乎)确定它应该返回 true,因为 spec.test/abbrev-result 会将其参数传递给 spec.test/check,并测试 :failure 的值。我无法构造出任何让 spec.test/check 为失败的测试返回(链接::failure true)的情况。为了信息,它会在通过测试时返回一个没有 :failure 键的映射。
以下是一个简单的重复示例在 REPL 中
(defn foo-fn (link: x) "bar")
(s/fdef foo-fn
:args (s/cat :x any?)
:ret string?)
(stest/check `foo-fn) ;; => 未发生错误,正常输出小的映射,没有 :failure 条目
(defn foo-fn (link: x) 1)
(stest/check `foo-fn) ;; => 完整的错误映射,:failure 等于 false。:failure 显示在下面
(-> (stest/check `foo-fn) first :failure) ;; => false