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

Setting environment variables when running Scala / SBT test suite

我创建了一个 Config 对象,它有一个基于 PROJECT_ENV 环境变量的 return 不同字符串的 get 方法。如果PROJECT_ENV=test,则Config.get("somePath") returns some/path.csv,否则returns 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.rb文件里用ENV['PROJECT_ENV'] = 'test'设置了环境变量。

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

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

这个问题似乎与 重叠。

那边接受的答案对我来说很有效:

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

关键是确保包含分叉,否则在启动 sbt 时会使用相同的环境。

我没有足够的声誉 post 作为对 Evan Closson 答案的评论,但是 starting in SBT 1.10“shell 和构建定义的作用域键语法已统一为斜杠语法。”

所以答案变成了

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