我正在使用play 2.3.8,並在我的GlobalSettings中有一些基於應用程序模式進行更改的配置。所以,我有這樣的事情:播放2.3 FakeApplication模式未在測試中設置?
object Global extends GlobalSettings {
override def onLoadConfig(config: Configuration, path: java.io.File, classloader: ClassLoader, mode: Mode.Mode) = {
println(mode)
val customConfig = //Based on mode.*
config ++ configuration ++ Configuration(ConfigFactory.parseMap(customConfig))
}
}
然後想寫測試,以確保這種行爲的工作原理:
class MyTest extends PlaySpec {
val testApp = FakeApplication(
additionalConfiguration = Map(
//SomeSettings And Stuff
"logger.application" -> "WARN",
"logger.root" -> "WARN"
)
)
val devApp = new FakeApplication(
additionalConfiguration = Map(
//SomeSettings And Stuff
"logger.application" -> "WARN",
"logger.root" -> "WARN"
)
) {
override val mode = Mode.Dev
}
val prodApp = new FakeApplication(
additionalConfiguration = Map(
//SomeSettings And Stuff
"logger.application" -> "WARN",
"logger.root" -> "WARN"
)
) {
override val mode = Mode.Prod
}
"ThisNonWorkingTestOfMine" must {
"when running application in test mode have config.thing = false" in running(testApp) {
assertResult(Mode.Test)(testApp.mode)
assertResult(false)(testApp.configuration.getBoolean("config.thing").get)
}
"when running application in dev mode have config.thing = false" in running(devApp) {
assertResult(Mode.Dev)(devApp.mode)
assertResult(false)(devApp.configuration.getBoolean("config.thing").get)
}
"when running application in prod mode have config.thing = true" in running(prodApp) {
assertResult(Mode.Prod)(prodApp.mode)
assertResult(true)(prodApp.configuration.getBoolean("config.thing").get)
}
}
}
當我運行這些測試中,我看到的東西有點古怪從我得心應手println
:
Test
null
null
[info] MyTest:
[info] ThisNonWorkingTestOfMine
[info] play - Starting application default Akka system.
[info] play - Shutdown application default Akka system.
[info] - must when running application in test mode have config.thing = false
[info] play - Application started (Dev)
[info] - must when running application in dev mode have config.thing = false
[info] play - Application started (Prod)
[info] - must when running application in prod mode have config.thing = true *** FAILED ***
[info] Expected true, but got false (MyTest.scala:64)
[info] ScalaTest
如何正確設置FakeApplication的模式播放2.3?我現在是基於從Mastering Play在頁面上,但顯然的方法是不使用的時候onLoadConfig似乎
編輯要走的路: 我也嘗試OneAppPerTest
和創建在該FakeApplication
newAppForTest
方法,但它仍然表現怪異,null與上述方法類似。因爲讓我FakeApplication
,然後嘗試在我Global
對象從config.getString
讀它,如果我在additionalConfiguration
地圖設置像"foo" -> "bar"
隨機屬性時,這是很奇怪的,它得到的記錄爲None
,即使當我在測試它本身做app.configuration.getString
顯示bar
。感覺這裏有一些類型的斷開。而我,如果我用FakeApplication.apply
方法,而不是new FakeApplication