clojure.spec 检查是否生成错误输入?

问题描述

使用 clojure.spec (org.clojure/clojurescript {:mvn/version "1.10.520"}),我有一个函数规范,为其输入指定一个映射。

gen/generategen/sample 工作正常。但是调用 cljs.spec.test.alpha/check 错误,输入应该是地图,但传递了一个集合 (Error: More than one element found in structure)。即,看起来规范系统正在生成错误的输入。

这是规范的错误吗?

条形规格

(s/def ::check-run
  (s/keys
    :req-un
    [::action
     ::check_run
     ::installation
     ::organization
     ::repository
     ::sender]))

foo.cljs

(s/def ::payload :bar/check-run)
(s/def ::check-run-started (s/keys :req-un [::payload]))

(s/fdef check-run->cijob-created
  :args (s/cat :arg ::check-run-started))

(defn check-run->cijob-created [arg])

虽然函数规范只声明了 A,但规范系统正在生成 B。

;; A
{:payload {:action "",:check_run {:html_url "",}},...}

;; B
[({:payload {:action "",...}})]

工作台

(cljs.spec.test.alpha/check
  `foo/check-run->cijob-created
  {:clojure.spec.test.check/opts {:num-tests 10}})


[{:spec #object[cljs.spec.alpha.t_cljs$spec$alpha50916],:clojure.spec.test.check/ret
  {:shrunk
   {:total-nodes-visited 313,:depth 148,:pass? false,:result #object[Error Error: More than one element found in structure: 0],:result-data #:clojure.test.check.properties{:error #object[Error Error: More than one element found in structure: 0]},:time-shrinking-ms 11299,:smallest
    [({:payload {:action "",...}})]},:sym foo/check-run->cijob-created,:failure #object[Error Error: More than one element found in structure: 0]}]


  [1]: https://clojure.org/about/spec

解决方法

好的,想通了这一点。由于我使用了 specter macro(带导航器),它失败了。我不确定如何。但不知何故,这弄乱了 test.check 生成器。我假设这是某种奇怪的相互作用,在 Clojurescript 的宏系统中是行不通的。

无论如何,迁移到更简单的 $("A").click(function (e){ $.ajax({ type:"GET",url: "/xxx",dataType: "Json",success: function (rep_data){ if (rep_data.a === true) { ... } else { $("B").click(function (){ ... }) } },error: function () { alert("error") } }) 解决了这个问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...