【问题标题】:How do I set up a clojureScript project to use specs and test the clojure.core functions at runtime?如何设置 clojureScript 项目以使用规范并在运行时测试 clojure.core 函数?
【发布时间】:2018-03-15 21:24:40
【问题描述】:

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。

【问题讨论】:

  • 您是否要求在调用时验证传递给 core.clj 中每个(或至少大部分)函数的参数结构? (不能包括所有这些,因为规范使用它们,所以如果没有一些技巧,这将是毫无根据的递归。
  • 是的,我想验证尽可能多的功能。
  • 我使用了库[org.clojure/test.check "0.10.0-alpha2"][org.clojure/spec.alpha "0.1.123"]和instrument。它可以检测我编写规范的函数中的问题。但它没有检测到 clojure.core(例如 map)的问题。也许规范不适用于 clojurescript(我正在使用 [org.clojure/clojure "1.9.0-beta1"] [org.clojure/clojurescript "1.9.946"])?

标签: clojure clojurescript clojure.spec


【解决方案1】:

这是因为没有 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?)

但是,请注意这一点,因为如果您没有正确处理,您可能会遇到令人讨厌的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多