如何使用Play和sbt在CI中使用单独的配置文件进行测试?

问题描述 投票:1回答:2

对于一个基于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"

我不完全了解这是怎么做的,但是似乎总是可以选择其他测试配置文件。

如何指定多个测试设置来拾取不同的配置文件?

scala playframework sbt
2个回答
0
投票

[首先尝试通过set命令应用设置,然后像这样继续执行test任务

addCommandAlias(
  "test-ci", 
  """;set Test/javaOptions ++= Seq("-Dconfig.file=conf/application.test.con"); test"""
)

注意;如何将settest分开。


0
投票

另一种方法是根据环境修改设置。通常,在CI上会设置一些环境变量,例如CIBUILD,因此您可以有条件地修改javaOptions(无需任何自定义配置):

Test/javaOptions ++= {
  if (sys.env.get("CI").isEmpty) Seq.empty
  else Seq("-Dconfig.file=conf/application.test-ci.conf")
} 

注意:Test/javaOptionsjavaOptions in Test的新语法(自sbt 1起)

© www.soinside.com 2019 - 2024. All rights reserved.