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

运行Scala/SBT测试套件时设置环境变量,scala,sbt,scalatest,Scala,Sbt,Scalatest,我已经使用get方法创建了一个Config对象,以根据PROJECT\u ENV环境变量返回不同的字符串。如果PROJECT\u ENV=test,则Config.get(“somePath”)返回some/path.csv,否则返回s3a://some\u bucket/a\u file.csv object Config { def test(): Map[String,String] = { Map( "somePath" -> "some/path.csv

我已经使用get方法创建了一个Config对象,以根据
PROJECT\u ENV
环境变量返回不同的字符串。如果
PROJECT\u ENV=test
,则
Config.get(“somePath”)
返回some/path.csv,否则返回s3a://some\u bucket/a\u 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\u helper.rb
文件中使用
ENV['PROJECT\u ENV']='test'
设置环境变量

什么是
spec\u helper.rb
文件中最具伸缩性的等效文件?如何在Scala中设置环境变量?这还不够


如果我运行
$PROJECT\u ENV=test sbt test
,我的测试套件将成功运行,但我只想运行
$sbt test

这个问题似乎与之有重叠

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

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

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

为什么要在sbt中设置环境变量?是否要跨应用程序使用它?