Передать переменную среды в SBT для использования в тесте Specs2?

Как правильно передать переменную окружения в SBT, чтобы к ней можно было обращаться с помощью Specs2? (И затем получить значение в Specs2.) Переменная среды будет содержать ключ API, который будет использоваться для тестирования.

Это должна быть переменная окружения, чтобы работать с зашифрованными переменными окружения Travis CI [1]

Моя настройка:

  1. SBT 0,13,0
  2. Specs2 2.3.4
  3. Трэвис CI

Изменить: бонусные баллы, если кто-то может сделать ссылку на репо с открытым исходным кодом, который делает это. Там должно быть несколько!

[1] Использование секретных ключей API на travis-ci

2 ответа

Я предполагаю, что вы можете зашифровать свой ключ с помощью 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"))
  }
}

Из ваших вопросов, я полагаю, вы хотите передать безопасные переменные среды, используя встроенную поддержку шифрования Travis?

Если это так, то переменная среды устанавливается до запуска SBT, поэтому она должна быть доступна для всех процессов. Я не использую спецификации, но стандартным способом получения переменной среды JVM является использование System.getenv(String), Возможно, sbt удаляет переменные среды перед запуском Specs; если это правда, то исправление должно быть как-то сделано в вашем build.sbt, и не относится к Travis.

Другие вопросы по тегам