【问题标题】:Is clojure.spec check generating bad input?clojure.spec 检查是否会产生错误的输入?
【发布时间】:2021-04-18 22:13:39
【问题描述】:

使用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])

虽然函数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


    【解决方案1】:

    好的,解决了这个问题。由于我使用了specter macro(带有导航器),它失败了。我不确定如何。但不知何故,这弄乱了 test.check 生成器。我假设这是某种奇怪的相互作用,在 Clojurescript 的宏系统中是行不通的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-16
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多