13

複数のテスト環境(本番、ステージング、開発)に対して異なるデータベース接続を定義したいと思います。「 sbtテスト用にsbt0.12.2の設定ファイルを指定するにはどうすればよいですか? 」という投稿を読んだ後、次のSBT設定を使用することで、以前のバージョンのPlayで可能だったようです。

val main = play.Project(appName, appVersion, appDependencies).settings(
    javaOptions in Test += "-Dconfig.file=conf/test.conf"
)

しかし、Build.scalaでこの設定を使用すると、次のエラーが発生します。

not found: value javaOptions

だから私の質問は、異なるテスト環境に対して異なる接続をどのように定義できるかということです。


編集: 考えられる回避策は、テスト中にデフォルト設定を上書きすることです。これは、環境変数を使用して実行できます。

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())
4

4 に答える 4

8

javaOptionsKeysオブジェクト内に含まれています。

Build.scalaファイルで適切なインポートを使用していることを確認してください。

import Keys._
于 2013-03-26T13:47:50.843 に答える
8

上記のソリューションを組み合わせて、構成ファイルをパラメーターとして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 
于 2013-08-09T05:54:14.450 に答える
5

Play2.5.xのアップデート

インポートKeys._の明示的なインポートは不要になり、構成リソースの場所のvmパラメーターが変更されました。

javaOptions in Test += "-Dconfig.resource=<conf_name>.conf"
于 2016-06-08T19:53:55.780 に答える
4

-Dconfig.file代替の設定ファイルを使用してコンソールからアプリケーションを実行できますが、他のオプションでは実現できない問題があるため、とにかくフルパスで使用する必要があります。UNIX環境の例:

play -Dconfig.file=/home/akkie/play/some-project/conf/local_akkie_dev.conf "~run 9123"

もちろん、起動を簡単にするために、この行を呼び出すためのbashスクリプトを作成できます。

編集:最初にメインの設定を含めて、必要なプロパティのみを上書きできるため、追加の設定ファイルごとに設定全体を書き込む必要はないことに注意してください。

include "application.conf"

key.to.override=blah

公式ドキュメントをご覧ください

于 2013-03-26T12:52:04.303 に答える