Fork me on GitHub
#clojure-spec
<
2021-09-10
>
Franklin08:09:20

ok.. I made a lot of progress.... I now have my tests looking like this

(deftest my-gen-test (is (= [](stest/check `ranged-rand))))

Franklin08:09:36

and this fails as expected when I call run-tests from cljs.test

> (run-tests)

Testing cljs.user

FAIL in (my-gen-test2) (repl-input.cljs:1:27)
expected: (= [] (stest/check (quote cljs.user/ranged-rand)))
  actual: (not (= [] [{:spec #object[cljs.spec.alpha.t_cljs$spec$alpha38994], :clojure.spec.test.check/ret {:shrunk {:total-nodes-visited 4, :depth 2, :pass? false, :result #error {:message "Specification-based check failed", :data {:cljs.spec.alpha/problems [{:path [:fn], :pred (cljs.core/fn [%] (cljs.core/>= (:ret %) (cljs.core/-> % :args :start))), :val {:args {:start -3, :end 0}, :ret -4}, :via [], :in []}], :cljs.spec.alpha/spec #object[cljs.spec.alpha.t_cljs$spec$alpha38456], :cljs.spec.alpha/value {:args {:start -3, :end 0}, :ret -4}, :cljs.spec.test.alpha/args (-3 0), :cljs.spec.test.alpha/val {:args {:start -3, :end 0}, :ret -4}, :cljs.spec.alpha/failure :check-failed}}, :result-data {:clojure.test.check.properties/error #error {:message "Specification-based check failed", :data {:cljs.spec.alpha/problems [{:path [:fn], :pred (cljs.core/fn [%] (cljs.core/>= (:ret %) (cljs.core/-> % :args :start))), :val {:args {:start -3, :end 0}, :ret -4}, :via [], :in []}], :cljs.spec.alpha/spec #object[cljs.spec.alpha.t_cljs$spec$alpha38456], :cljs.spec.alpha/value {:args {:start -3, :end 0}, :ret -4}, :cljs.spec.test.alpha/args (-3 0), :cljs.spec.test.alpha/val {:args {:start -3, :end 0}, :ret -4}, :cljs.spec.alpha/failure :check-failed}}}, :time-shrinking-ms 2, :smallest [(-3 0)]}, :failed-after-ms 7, :num-tests 5, :seed 1631262481706, :fail [(-6 -1)], :result #error {:message "Specification-based check failed", :data {:cljs.spec.alpha/problems [{:path [:fn], :pred (cljs.core/fn [%] (cljs.core/>= (:ret %) (cljs.core/-> % :args :start))), :val {:args {:start -6, :end -1}, :ret -9}, :via [], :in []}], :cljs.spec.alpha/spec #object[cljs.spec.alpha.t_cljs$spec$alpha38456], :cljs.spec.alpha/value {:args {:start -6, :end -1}, :ret -9}, :cljs.spec.test.alpha/args (-6 -1), :cljs.spec.test.alpha/val {:args {:start -6, :end -1}, :ret -9}, :cljs.spec.alpha/failure :check-failed}}, :result-data {:clojure.test.check.properties/error #error {:message "Specification-based check failed", :data {:cljs.spec.alpha/problems [{:path [:fn], :pred (cljs.core/fn [%] (cljs.core/>= (:ret %) (cljs.core/-> % :args :start))), :val {:args {:start -6, :end -1}, :ret -9}, :via [], :in []}], :cljs.spec.alpha/spec #object[cljs.spec.alpha.t_cljs$spec$alpha38456], :cljs.spec.alpha/value {:args {:start -6, :end -1}, :ret -9}, :cljs.spec.test.alpha/args (-6 -1), :cljs.spec.test.alpha/val {:args {:start -6, :end -1}, :ret -9}, :cljs.spec.alpha/failure :check-failed}}}, :failing-size 4, :pass? false}, :sym cljs.user/ranged-rand, :failure #error {:message "Specification-based check failed", :data {:cljs.spec.alpha/problems [{:path [:fn], :pred (cljs.core/fn [%] (cljs.core/>= (:ret %) (cljs.core/-> % :args :start))), :val {:args {:start -3, :end 0}, :ret -4}, :via [], :in []}], :cljs.spec.alpha/spec #object[cljs.spec.alpha.t_cljs$spec$alpha38456], :cljs.spec.alpha/value {:args {:start -3, :end 0}, :ret -4}, :cljs.spec.test.alpha/args (-3 0), :cljs.spec.test.alpha/val {:args {:start -3, :end 0}, :ret -4}, :cljs.spec.alpha/failure :check-failed}}}]))

Ran 1 tests containing 1 assertions.
1 failur

Franklin08:09:24

I wonder if there's an existing cljs.test function that can check if stest.check fails and show me log the results

Franklin08:09:07

I also think I can write a custom function... for this one using test/abbrev-result... but I wonder if there's something there already

uwo18:09:47

The correct way to spec a singular value is a set correct? Silly contrived example: (s/conform (s/tuple #{:db/add} int? #{:attr} #{:value}) [:db/add 17592311384347 :attr :value])