Подтвердить что ты не робот

Как я могу указать другой файл конфигурации для тестирования в Play 2.1

Я хотел бы определить различные подключения к базе данных для нескольких тестовых сред (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())
4b9b3361

Ответ 1

javaOptions содержится в объекте Keys.

Убедитесь, что вы используете правильный импорт в файле Build.scala:

import Keys._

Ответ 2

мы можем смешать вышеупомянутые решения, передать файл конфигурации в качестве параметра в 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 

Ответ 3

Обновление для Play 2.5.x

Явный импорт для импорта Keys._ больше не требуется, а параметр vm для расположения ресурсов конфигурации изменился.

javaOptions in Test += "-Dconfig.resource=<conf_name>.conf"

Ответ 4

Вы можете запустить приложение с консоли с помощью альтернативного файла конфигурации, в любом случае вам нужно использовать -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

Взгляните на официальный официальный документ