【问题标题】:How to use a separate configuration file for tests in CI, using Play and sbt?如何使用 Play 和 sbt 在 CI 中使用单独的配置文件进行测试?
【发布时间】:2020-09-02 12:07:44
【问题描述】:

对于基于 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


    【解决方案1】:

    另一种方法是根据环境修改设置。通常在 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 起)

    【讨论】:

      【解决方案2】:

      尝试首先通过set 命令应用设置,然后像这样跟进test 任务

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

      注意; 如何将settest 分开。

      【讨论】:

      • 很好,这似乎有效!据我了解,这最终导致配置文件被设置两次,设置为不同的值(因为 javaOption 已经为主要的test 命令设置),对吧?该应用程序似乎在这里选择了一个,但我不确定这是否得到保证。
      • 认为可以通过在命令前添加 ;set Test/javaOptions --= Seq("-Dconfig.file=conf/application.test.conf") 来删除现有标志来使这更安全。
      猜你喜欢
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 2013-03-16
      相关资源
      最近更新 更多