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 "", :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

好的,想通了这个。由于我使用了幽灵宏(带有导航器),它失败了。我不知道怎么做。但不知何故,这搞砸了测试检查生成器。我假设这是某种奇怪的相互作用,与Clojurescript的宏系统是行不通的。

无论如何,迁移到更简单的get-in解决了问题。

相关内容

最新更新