Clojure:如何在全球范围内启用规范断言?

Clojure: how to enable spec asserts globally?

我想使用 clojure 规范来检查我的函数的输入(至少在开发期间)。到目前为止,我已经完成了以下工作:我已经定义了规范,并且在函数的开头我已经像这个例子中那样做了断言:

(defn foo [bar]
  (s/assert ::bar bar)
  (do-something-with bar))

其中 sclojure.spec.alpha 的别名。默认情况下,这些断言似乎被禁用(当 运行 使用 midje 进行单元测试时)。我可以通过将 (s/check-asserts true) 放入我的文件之一来启用它们。不过,我不确定此设置的范围是什么。我觉得将它简单地放入其中一个源文件中是不对的,尽管到目前为止它似乎对我有用。

在测试期间全局启用这些断言但在部署应用程序时禁用它们的推荐方法是什么?

调用此函数是全局启用规范的正确方法。我会将它放在所有测试都需要的全局测试帮助程序文件的顶部,如果您希望它在所有测试中全局启用。

还有系统 属性 clojure.spec.check-asserts,您可以将其设置为 true。这用于设置断言检查的初始值。 参见 https://clojure.org/guides/spec#_using_spec_for_validation