运行Scala / SBT测试套件时设置环境变量

时间:2016-10-06 17:16:50

标签: scala sbt scalatest

我使用get方法创建了一个Config对象,以根据PROJECT_ENV环境变量返回不同的字符串。如果PROJECT_ENV=test,则Config.get("somePath")返回一些/ path.csv,否则返回s3a://some_bucket/a_file.csv。

object Config {

  def test(): Map[String,String] = {
    Map(
      "somePath" -> "some/path.csv"
    )
  }

  def default(): Map[String,String] = {
    Map(
      "somePath" -> "s3a://some_bucket/a_file.csv"
    )
  }

  def get(key: String, env: Option[String] = sys.env.get("PROJECT_ENV")): String = {
    val lookupMap = if (env == Some("test")) {
      List(default(), test()).flatten.toMap
    } else {
      default()
    }
    lookupMap(key)
  }

}

使用Ruby / RSpec,我使用spec_helper.rbENV['PROJECT_ENV'] = 'test'文件中设置环境变量。

spec_helper.rb文件的最新等价物是什么?如何在Scala中设置环境变量? This answer还不够。

如果我运行$ PROJECT_ENV=test sbt test,我的测试套件会成功运行,但我只想运行$ sbt test

1 个答案:

答案 0 :(得分:4)

此问题似乎与Set default env variable for test configuration in sbt重叠。

那边接受的答案对我很有用:

fork in Test := true
envVars in Test := Map("PROJECT_ENV" -> "test")

关键是要确保包含fork,否则在启动sbt时使用相同的env。