Ответ 1
javaOptions
содержится в объекте Keys.
Убедитесь, что вы используете правильный импорт в файле Build.scala
:
import Keys._
Я хотел бы определить различные подключения к базе данных для нескольких тестовых сред (Production, Staging, Development). После прочтения сообщения "Как указать конфигурационный файл с sbt 0.12.2 для теста sbt?" кажется, что это было возможно в более ранних версиях Play, используя значение следующей настройки SBT:
val main = play.Project(appName, appVersion, appDependencies).settings(
javaOptions in Test += "-Dconfig.file=conf/test.conf"
)
Но если я использую этот параметр в моей Build.scala, я получаю следующую ошибку:
not found: value javaOptions
Итак, мой вопрос: как я могу определить разные подключения для разных тестовых сред?
Edit: Возможным обходным решением было бы переопределить настройку по умолчанию во время тестирования. Это можно сделать с помощью переменной окружения.
object Config {
var defaultConfig = Map(
"db.default.user" -> "user",
"db.default.pass" -> "************"
)
def additionalConfiguration(): Map[String, _] = sys.env.getOrElse("PLAY_TEST_SCOPE", "") match {
case "development" => {
defaultConfig += "db.default.url" -> "jdbc:mysql://host:3306/development"
defaultConfig
}
case "staging" => {
defaultConfig += "db.default.url" -> "jdbc:mysql://host:3306/staging"
defaultConfig
}
case "production" => {
defaultConfig += "db.default.url" -> "jdbc:mysql://host:3306/production"
defaultConfig
}
case _ => {
throw new Exception("Environment variable `PLAY_TEST_SCOPE` isn't defined")
}
}
}
И затем запустить поддельное приложение с этой конфигурацией.
FakeApplication(additionalConfiguration = Config.additionalConfiguration())
javaOptions
содержится в объекте Keys.
Убедитесь, что вы используете правильный импорт в файле Build.scala
:
import Keys._
мы можем смешать вышеупомянутые решения, передать файл конфигурации в качестве параметра в sbt.
Это будет полезно для интеграции теста в конвейер CI
Сначала в файле Build.scala
val testOptions = "-Dconfig.file=conf/" + Option(System.getProperty("test.config")).getOrElse("application") + ".conf"
val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
javaOptions in Test += testOptions
)
Затем в командной строке для запуска теста с integ.conf
sbt -Dtest.config=integ test
использовать стандартный application.conf
sbt test
Обновление для Play 2.5.x
Явный импорт для импорта Keys._ больше не требуется, а параметр vm для расположения ресурсов конфигурации изменился.
javaOptions in Test += "-Dconfig.resource=<conf_name>.conf"
Вы можете запустить приложение с консоли с помощью альтернативного файла конфигурации, в любом случае вам нужно использовать -Dconfig.file
с полным путем, поскольку есть некоторые проблемы... которые я не могу реализовать с другой опцией. Пример в unix env:
play -Dconfig.file=/home/akkie/play/some-project/conf/local_akkie_dev.conf "~run 9123"
Конечно, для более простого запуска вы можете создать bash script для вызова этой строки.
Изменить: Обратите внимание, что вам не нужно записывать всю конфигурацию в каждый дополнительный файл конфигурации, так как вы можете просто включить свою основную конфигурацию с самого начала, а затем перезаписать только требуемые свойства:
include "application.conf"
key.to.override=blah
Взгляните на официальный официальный документ