如何设置clojureScript项目以使用规范并在运行时测试clojure.core函数?

How do I set up a clojureScript project to use specs and test the clojure.core functions at runtime?

Clojure 1.9推出了规格。 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。


这是因为没有clojure.core函数的规范,只有几个宏的规范-请看这里:https://github.com/clojure/core.specs.alpha/blob/master/src/main /clojure/clojure/core/specs/alpha.clj#L53

请注意:

macros are always checked during macro expansion, you do not need to
call instrument for macro specs

(https://clojure.org/guides/spec#_macros)

您可以编写自己的核心功能规范并按如下所示进行注册:https://clojure.github.io/clojure/branch-master/clojure.spec-api.html#clojure.spec/fdef

1
2
3
4
5
(s/fdef clojure.core/symbol
  :args (s/alt :separate (s/cat :ns string? :n string?)
               :str string?
               :sym symbol?)
  :ret symbol?)

但是,请谨慎操作,因为如果处理不正确,可能会遇到令人讨厌的问题。