Pow*_*ers 7 scala sbt scalatest
我已经使用get方法创建了一个Config对象,以根据PROJECT_ENV环境变量返回不同的字符串.如果PROJECT_ENV=test,则Config.get("somePath")返回some/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)
}
}
Run Code Online (Sandbox Code Playgroud)
使用Ruby/RSpec,我在spec_helper.rb文件中设置环境变量ENV['PROJECT_ENV'] = 'test'.
什么是spec_helper.rb文件的最新等价物?如何在Scala中设置环境变量? 这个答案是不够的.
如果我运行$ PROJECT_ENV=test sbt test,我的测试套件会成功运行,但我想简单地运行$ sbt test.
小智 9
这个问题似乎与Set default env variable for test configuration in sbt 重叠。
那里接受的答案对我来说效果很好:
fork in Test := true
envVars in Test := Map("PROJECT_ENV" -> "test")
Run Code Online (Sandbox Code Playgroud)
关键是要确保包含 fork,否则在使用启动 sbt 时会使用相同的 env。
我没有足够的声誉来将此作为对Evan Closson的答案的评论,但从 SBT 1.10 开始, “作用域键的语法已针对 shell 和构建定义统一为斜杠语法。”
所以答案就变成了
Test / fork := true
Test / envVars := Map("PROJECT_ENV" -> "test")
Run Code Online (Sandbox Code Playgroud)