Не вызывает ли проверка 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, система спецификации генерирует 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
1 ответ
Хорошо, разобрался с этим. Это не удалось из-за того, что я использовал макрос Spectre (с навигаторами). Не знаю как. Но почему-то это портит генераторы test.check. Я предполагаю, что это какое-то странное взаимодействие, которое не работает с макросистемой Clojurescript.
В любом случае, переход на более простой
get-in
исправил проблему.