我正在使用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