【问题标题】:Setting environment variables when running Scala / SBT test suite运行 Scala / SBT 测试套件时设置环境变量
【发布时间】:2017-02-15 13:20:58
【问题描述】:

我创建了一个带有 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)
  }

}

使用 Ruby / RSpec,我在 spec_helper.rb 文件中使用 ENV['PROJECT_ENV'] = 'test' 设置环境变量。

spec_helper.rb 文件的最大等价物是什么?如何在 Scala 中设置环境变量? This answer 还不够。

如果我运行 $ PROJECT_ENV=test sbt test,我的测试套件会成功运行,但我只想运行 $ sbt test

【问题讨论】:

  • 为什么要在sbt里面设置环境变量?您想跨应用程序使用它吗?

标签: scala sbt scalatest


【解决方案1】:

这个问题似乎与Set default env variable for test configuration in sbt 重叠。

那里接受的答案对我来说效果很好:

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

关键是要确保包含分叉,否则在启动 sbt 时会使用相同的环境。

【讨论】:

    【解决方案2】:

    我没有足够的声誉将其发布为Evan Closson 的答案的评论,但是 starting in SBT 1.10 "shell 和构建定义的范围键语法已统一为斜线语法。"

    所以答案就变成了

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 2021-10-11
      • 2020-04-06
      • 2018-06-27
      • 1970-01-01
      • 2012-06-20
      相关资源
      最近更新 更多