2016-04-27 67 views
1

在运行时检测代码是否以lein test开头有没有太脏的方法?我只想选择不同的redis数据库,所以像environ或使用不同资源文件的解决方案似乎有点矫枉过正。检测leiningen测试模式

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

+0

http://stackoverflow.com/questions/32323572/ - 第二个答案也许?看起来环境是要走的路。 – birdspider

回答

0

有没有简单的方法来做到这一点。 lein.testclojure.test都没有公开这些信息。即使你找到一种方法来破解一些私有变量的lein测试或clojure.test并检查它以确定你的代码是否作为lein test的一部分运行。

不过,这将有一个非常大的问题:你的产品代码需要require测试库代码(例如clojure.test)或更糟的构建工具的代码(lein test插件代码)。

您可能会尝试在您的生产代码中定义这样的配置var(动态或不),并使用fixtures将其设置在测试中。

最好的解决方案是根据系统属性或环境变量等外部变量动态配置应用程序(例如使用建议的environ)。这样,您可以根据需要配置尽可能多的不同配置集(例如,prod vs单元测试vs集成测试vs性能测试等),而不仅仅是两个(prod vs测试)。

0

它可能看起来像是矫枉过正,但组件例如是为像这样的确切用途而发明的。一般情况下还是依赖注入。

我知道那种感觉,它只是一个私人项目,无需困难的东西等等。这就是为什么我把我的自己的模板,让所有我需要开始运行lein new ...
这是我的解决方案,以规避“只想选择不同的redis数据库”usecases。

编辑这是一个web框架模板:https://github.com/sveri/closp但很多这些部件都没有专门针对Web开发,尤其是组件部分:https://github.com/sveri/closp/tree/master/resources/leiningen/new/closp/clj/components
还有一个集成测试,我使用的测试组件具体如下:https://github.com/sveri/closp/blob/master/resources/leiningen/new/closp/integtest/clj/web/setup.clj

+1

是github上的这个模板吗? :-)即使它对你来说是特定的,但有更多的例子可供他人学习是很好的 –