I've created a Config object with a get method to return different strings based on the PROJECT_ENV
environment variable. If PROJECT_ENV=test
, then Config.get("somePath")
returns some/path.csv, otherwise it 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)
}
}
With Ruby / RSpec, I set the environment variable in the spec_helper.rb
file with ENV['PROJECT_ENV'] = 'test'
.
What is the scalatest equivalent of the spec_helper.rb
file? How can I set an environment variable in Scala? This answer isn't sufficient.
My test suite runs successfully if I run $ PROJECT_ENV=test sbt test
, but I want to simply run $ sbt test
.
I don't have enough reputation to post this as a comment for Evan Closson's answer, but starting in SBT 1.10 "the syntax for scoping keys has been unified for both the shell and the build definitions to the slash syntax."
So the answer becomes
Test / fork := true
Test / envVars := Map("PROJECT_ENV" -> "test")
This question appears to have overlap with Set default env variable for test configuration in sbt .
The accepted answer over there worked well for me:
fork in Test := true
envVars in Test := Map("PROJECT_ENV" -> "test")
The key is to make sure to include the fork otherwise the same env in play when launching sbt gets used.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With