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