对于一个基于Play with sbt的项目,我想使用不同的配置文件来进行多种测试运行。动机能够针对本地或远程数据库运行测试。
已经有一个专门用于常规测试运行的自定义配置文件(在build.sbt中:
javaOptions in Test += "-Dconfig.file=conf/application.test.conf"
现在,我想拥有另一个命令,可以对某些配置文件conf/application.test-ci.conf
进行相同的测试。
addCommandAlias("test-ci", ";test -Dconfig.file=conf/application.test-ci.conf")
此操作失败,并显示一条错误消息,其中缺少分号(;
),表明sbt将结果命令行解释为多个命令,但我不明白为什么。
Test
lazy val CITest = config("ci") extend Test
lazy val config = (project in file(".")).enablePlugins(PlayScala)
.configs(CITest)
.settings(inConfig(CITest)(Defaults.testTasks): _*)
.settings(
javaOptions in CITest += "-Dconfig.file=conf/application.test-ci.conf"
)
javaOptions in CITest -= "-Dconfig.file=conf/application.test.conf"
我不完全了解这是怎么做的,但是似乎总是可以选择其他测试配置文件。
如何指定多个测试设置来拾取不同的配置文件?
[首先尝试通过set
命令应用设置,然后像这样继续执行test
任务
addCommandAlias(
"test-ci",
""";set Test/javaOptions ++= Seq("-Dconfig.file=conf/application.test.con"); test"""
)
注意;
如何将set
与test
分开。
另一种方法是根据环境修改设置。通常,在CI上会设置一些环境变量,例如CI
或BUILD
,因此您可以有条件地修改javaOptions
(无需任何自定义配置):
Test/javaOptions ++= {
if (sys.env.get("CI").isEmpty) Seq.empty
else Seq("-Dconfig.file=conf/application.test-ci.conf")
}
注意:Test/javaOptions
是javaOptions in Test
的新语法(自sbt 1起)