Не вызывает ли проверка 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 исправил проблему.

Другие вопросы по тегам