Передать переменную среды в SBT для использования в тесте Specs2?
Как правильно передать переменную окружения в SBT, чтобы к ней можно было обращаться с помощью Specs2? (И затем получить значение в Specs2.) Переменная среды будет содержать ключ API, который будет использоваться для тестирования.
Это должна быть переменная окружения, чтобы работать с зашифрованными переменными окружения Travis CI [1]
Моя настройка:
- SBT 0,13,0
- Specs2 2.3.4
- Трэвис 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.