Clojure 1.9介绍specs。 clojure.core库中的函数现在有规格。如何设置clojurescript项目以使用规范并在运行时测试clojure.core函数?
我使用库[org.clojure/test.check "0.10.0-alpha2"]
和[org.clojure/spec.alpha "0.1.123"]
来安装specs
和命令instrument
。它可以检测我编写规范的函数中的问题。但它没有检测到clojure.core
的问题(例如,map
)。
也许规格不适用于clojurescript。
答案 0 :(得分:2)
这是因为clojure.core
函数没有规范,只有几个宏的规格 - 请看这里:https://github.com/clojure/core.specs.alpha/blob/master/src/main/clojure/clojure/core/specs/alpha.clj#L53
请注意:
在宏扩展期间始终检查宏,您不需要 调用宏观规格的工具
(https://clojure.org/guides/spec#_macros)
您可以为核心功能编写自己的规范并注册它们,如下所示:https://clojure.github.io/clojure/branch-master/clojure.spec-api.html#clojure.spec/fdef
(s/fdef clojure.core/symbol
:args (s/alt :separate (s/cat :ns string? :n string?)
:str string?
:sym symbol?)
:ret symbol?)
但是,要小心这一点,因为如果你做不好,你可能会遇到令人讨厌的问题。