运行 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")
我创建了一个 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")