如何解决clojure.spec 检查是否生成错误输入?
使用 clojure.spec (org.clojure/clojurescript {:mvn/version "1.10.520"}
),我有一个函数规范,为其输入指定一个映射。
gen/generate
和 gen/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
{: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 举报,一经查实,本站将立刻删除。