有没有办法在调用时覆盖核心谓词函数的生成器clojure.spec.test.alpha/check
?
可以通过内部路径覆盖谓词生成器s/gen
:
(gen/generate
(s/gen
(s/cat :s string?)
{[:s] #(gen/return "xyz")}))
但该选项不存在于test/check
:
(defn xyz [s] s)
(s/fdef xyz
:args (s/cat :s string?)
:ret string?)
;; throws
(test/check
`xyz
{:gen {[:args :s] #(gen/return "xyz")}})
必须提供名称或符号,但规范的名称是什么?string?
我试过使用符号,都是'字符串?和`字符串?但它也没有用。
string?
通过s/with-gen
内部包装覆盖生成器s/fdef
会导致生成器代码显示在函数的文档中......这会影响 imo 的可读性。
仅仅为此目的定义新规范::string
感觉不对。