2024 Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面,了解有关如何使用本站的更多信息。

0
Clojure

最近,我在我所工作的公司的一个项目中发现了一个错误。

基本上,发生的事情是在测试命名空间内部需要了两个不同的命名空间,我们可以叫它们first-ns和second-ns。

first-ns和second-ns都定义了具有相同名称的spec,比如这样

(ns first-ns)
(s/def :same/name
    int?)

(ns second-ns)
(s/def :same/name
    string?)

所以我的问题是,有没有一种方法可以使Clojure编译器对这种情况报出名称冲突的警告?在包含数百个spec的大型代码库中,这种情况偶尔会发生,并可能导致heisenbug。唯一的方法是不是将spec命名空间设置为与定义它们的文件的同一ns吗?

1 个答案

0

被选中
 
最佳答案

Specs被有意设置在注册表中可覆盖,就像你总是在REPL中这样做一样。

尽管如此,也许在发生这种情况时发出警告是有用的,或者有一个像*warn-on-spec-replace*这样的设置来做这件事。

编辑:无需在意,我发现测试文件末尾有一个注释块。

谢谢,Alex!

很抱歉打扰您,但我对尝试实现 *warn-on-spec-replace* 感兴趣,但我找不到在 clojure.spec.alpha 中执行测试的方法,因此我无法测试我的实现。

您能告诉我如何在那个项目中运行测试吗?


...