将环境变量传递给SBT以在Specs2测试中使用?

时间:2013-12-24 12:50:38

标签: sbt travis-ci specs2

将环境变量传入SBT的正确方法是什么,以便可以使用Specs2进行访问? (然后检索Specs2中的值。)环境变量将包含用于测试的API密钥。

它需要是一个环境变量才能使用Travis CI的加密环境变量功能[1]

我的设置:

  1. SBT 0.13.0
  2. Specs2 2.3.4
  3. Travis CI
  4. 如果有人可以链接到执行此操作的开源代码库,那么

    编辑奖励积分。必须有几个!

    [1] Using secret api keys on travis-ci

2 个答案:

答案 0 :(得分:1)

我猜您可以使用travis api加密密钥并获取:

xxxEncryptedxxx

然后,您可以使用CommandLineArguments特征将SBT中命令行的参数传递给您的规范。

.travis.yml

sbt ++$TRAVIS_SCALA_VERSION testOnly *MySpec* -- key xxxEncryptedxxx

MySpec.scala

class MySpec extends mutable.Specification with CommandLineArguments {
  "this is an API test" >> {
    arguments.commandLine.value("key").map { k =>
      callApi(k) must beOk
    }.getOrElse(ko("you need to pass a key on the command line"))
  }
}

答案 1 :(得分:0)

从您的问题来看,我认为您希望使用Travis's built-in support for encryption传递安全的环境变量?

如果是,则在运行SBT之前设置环境变量,因此它应该可供所有进程使用。我不使用Specs,但获取环境变量的标准JVM方法是使用System.getenv(String)可能 sbt在运行Specs之前删除环境变量;如果这是真的那么必须以某种方式在build.sbt中完成修复,并且不是特定于Travis。