【发布时间】:2021-04-18 22:13:39
【问题描述】:
使用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])
虽然函数spec只声明了A,但spec系统正在生成B。
;; A
{:payload {:action "", :check_run {:html_url "", }}, ...}
;; B
[({:payload {:action "", :check_run {:html_url "", }}, ...}})]
工作台
(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 "", :check_run {:html_url "", }}, ...}})]},
:sym foo/check-run->cijob-created,
:failure #object[Error Error: More than one element found in structure: 0]}]
[1]: https://clojure.org/about/spec
【问题讨论】:
标签: testing clojure clojure.spec test.check generative-testing