微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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") } }) 解决了这个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?