2
votes

For a project based on Play with sbt, I'd like to have multiple flavors for test runs, using different configuration files. Motivation is being able to run tests either against a local or a remote database.

There's already a custom config file speicified for general test runs (in build.sbt):

javaOptions in Test += "-Dconfig.file=conf/application.test.conf"    

Now I would like to have another command where the same tests run against some configuration file conf/application.test-ci.conf.

Approaches tried so far

Adding a command alias

addCommandAlias("test-ci", ";test -Dconfig.file=conf/application.test-ci.conf")

This fails with an error message of a missing semicolon (;), indicating that sbt interprets the resulting command line as multiple commands, but I don't understand why.

Extend 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"

I'm don't fully understand what this is doing, but it always seems to pick up the other test configuration file.

How can I specify multiple test setups picking up different configuration files?

2

2 Answers

1
votes

Try first applying the setting via set command and then follow up with test task like so

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

Notice how ; separates the set from test.

1
votes

Another approach is to modify the setting based on the environment. Usually there is some environment variable set on CI like CI or BUILD, so you can modify javaOptions conditionally (without any custom configurations):

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

Note: Test/javaOptions is the new syntax for javaOptions in Test (since sbt 1)