Scala 如何使用Play和sbt为CI中的测试使用单独的配置文件?

Scala 如何使用Play和sbt为CI中的测试使用单独的配置文件?,scala,playframework,sbt,Scala,Playframework,Sbt,对于一个基于Play with sbt的项目,我希望使用不同的配置文件进行多种风格的测试运行。动机是能够对本地或远程数据库运行测试 已经有一个自定义配置文件专门用于常规测试运行(在build.sbt中): 现在,我想使用另一个命令,在该命令中,对一些配置文件conf/application.test ci.conf运行相同的测试 迄今为止尝试过的方法 添加命令别名 此操作失败,错误消息为缺少分号(;),表明sbt将生成的命令行解释为多个命令,但我不明白为什么 扩展测试 我不完全理解这是在做什么,

对于一个基于Play with sbt的项目,我希望使用不同的配置文件进行多种风格的测试运行。动机是能够对本地或远程数据库运行测试

已经有一个自定义配置文件专门用于常规测试运行(在build.sbt中):

现在,我想使用另一个命令,在该命令中,对一些配置文件
conf/application.test ci.conf
运行相同的测试

迄今为止尝试过的方法 添加命令别名 此操作失败,错误消息为缺少分号(
),表明sbt将生成的命令行解释为多个命令,但我不明白为什么

扩展
测试
我不完全理解这是在做什么,但它似乎总是选择另一个测试配置文件


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

首先尝试通过
set
命令应用设置,然后执行
test
任务

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

注意
设置
测试
分开

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


注意:
Test/javaOptions
是Test中的
javaOptions的新语法(从SBT1开始)

很好,这似乎很有效!据我所知,现在配置文件被设置了两次,设置为不同的值(因为主
test
命令已经设置了javaOption),对吗?虽然应用程序似乎选择了这里的一个,但我不确定这是否是保证。我认为这可以通过prepend
变得更安全;将Test/javaOptions--=Seq(“-Dconfig.file=conf/application.Test.conf”)
设置为命令,以删除现有标志。
addCommandAlias("test-ci", ";test -Dconfig.file=conf/application.test-ci.conf")
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"
addCommandAlias(
  "test-ci", 
  """;set Test/javaOptions ++= Seq("-Dconfig.file=conf/application.test.con"); test"""
)
Test/javaOptions ++= {
  if (sys.env.get("CI").isEmpty) Seq.empty
  else Seq("-Dconfig.file=conf/application.test-ci.conf")
}