Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting environment variables when running Scala / SBT test suite

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.

like image 928
Powers Avatar asked Oct 06 '16 17:10

Powers


2 Answers

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")
like image 193
bfdes Avatar answered Oct 31 '22 13:10

bfdes


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.

like image 13
Evan Closson Avatar answered Oct 31 '22 11:10

Evan Closson