Clojure 检测leiningen测试模式

Clojure 检测leiningen测试模式,clojure,leiningen,Clojure,Leiningen,是否有一种不太脏的方法可以在运行时检测代码是否以lein test启动?我只想选择一个不同的redis数据库,所以像environ或使用不同的资源文件这样的解决方案似乎有点过头了 例如,leiningen自动启用测试配置文件,但我还没有找到一种方法来获取当前启用的配置文件列表。没有简单的方法可以做到这一点。无论是lein.test还是clojure.test都不会公开此类信息。即使您找到了一种方法来侵入lein test或clojure.test的某些私有变量,并检查它以确定您的代码是否作为le

是否有一种不太脏的方法可以在运行时检测代码是否以
lein test
启动?我只想选择一个不同的redis数据库,所以像environ或使用不同的资源文件这样的解决方案似乎有点过头了


例如,leiningen自动启用测试配置文件,但我还没有找到一种方法来获取当前启用的配置文件列表。

没有简单的方法可以做到这一点。无论是
lein.test
还是
clojure.test
都不会公开此类信息。即使您找到了一种方法来侵入lein test或
clojure.test的某些私有变量,并检查它以确定您的代码是否作为
lein test的一部分运行

然而,这将有一个非常大的问题:您的生产代码需要
要求测试库代码(例如
clojure.test
),或者更糟糕的是,您的构建工具代码(
lein test
插件代码)

您可以尝试在生产代码中定义这样的配置变量(动态或非动态),并使用fixture在测试中进行设置


最好的解决方案是根据外部变量(如系统属性或环境变量)动态配置应用程序(例如,使用建议的
environ
)。通过这种方式,您可以根据需要拥有任意多个不同的配置集(例如,产品与单元测试、集成测试与性能测试等等),而不仅仅是两个配置集(产品与测试)。

这可能看起来有些过分,但例如,组件就是为这样的确切用例而发明的。或者一般的依赖注入

我知道这种感觉,这只是一个私人项目,不需要困难的东西等。这就是为什么我把自己的模板放在一起,这样我就可以开始运行
lein new…

这是我规避“只想选择不同的redis数据库”用例的解决方案

编辑它是一个web框架的模板:但是这些部分中有很多不是web开发人员特有的,尤其是组件部分:
还有一个集成测试,我特别使用了测试组件:

我找到了一种方法。在“env/{test | prod | test}/config.clj”文件中设置一个var:

然后您可以读取该值:

 (require '[cprop.source :as source])
 (str "from-system-props: >> " (:lein-profile (source/from-system-props)))
其他选项是在系统道具中搜索键“:conf”:

:conf "test-config.edn"

因为配置文件会根据配置文件进行更改

-也许是第二个答案?看起来环境是一个不错的选择。这个模板在github上吗?:-)即使是针对你的,有更多的例子供他人学习也是很好的
:conf "test-config.edn"