Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure:如何全局启用规范断言?_Clojure_Clojure.spec - Fatal编程技术网

Clojure:如何全局启用规范断言?

Clojure:如何全局启用规范断言?,clojure,clojure.spec,Clojure,Clojure.spec,我想使用clojure规范来检查我的函数的输入(至少在开发期间)。到目前为止,我已经做了以下工作:我已经定义了规范,在函数的开始部分,我提出了如下示例中的断言: (defn foo [bar] (s/assert ::bar bar) (do-something-with bar)) 其中s是clojure.spec.alpha的别名。默认情况下,这些断言似乎被禁用(在使用midje运行单元测试时)。我可以通过将(s/check asserts true)放入我的一个文件中来启用它们。

我想使用clojure规范来检查我的函数的输入(至少在开发期间)。到目前为止,我已经做了以下工作:我已经定义了规范,在函数的开始部分,我提出了如下示例中的断言:

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


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

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

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

如何设置这样的系统属性?我找不到任何好消息。这与Java系统属性是一样的吗?是的,它与命令行上的标准Java
-D
是一样的。我仍然不明白在运行leiningen测试时如何设置系统属性。命令如<代码> Lein Mije-DCuljur.Sq.Cuq-AsSts= Trase< /Cord>似乎不起作用。如前所述,如果您这样做,您可以考虑调用<代码>检查断言< /代码>函数。例如,我们对所有指定的函数进行如下插入:
:profiles{:test{:injections[(要求'[chestration.spec.test:as stest])(stest/instrument)(.println System/err“Instrumented specs”)]}
我无法启用具有系统属性的断言,但是在注入成功的情况下调用
检查断言
:注入[(要求'[clojure.spec.alpha:as s])(s/check断言true)]