【问题标题】:Testing: FakeApplication ignoring additionalConfiguration测试:FakeApplication 忽略附加配置
【发布时间】:2012-10-31 06:52:50
【问题描述】:

我正在尝试在 Play 2.0 w/Scala 项目上添加测试:

"Application" should {

    "return 404 on the index Action if web is disabled " in {
      running(FakeApplication(additionalConfiguration = Map(("enable.webInterface" -> "false")) )) {

        Config.IS_WEB_ENABLED must beFalse

        val result = controllers.Application.index()(FakeRequest())

        status(result) must equalTo(NOT_FOUND)
        contentType(result) must beSome("text/html")
        charset(result) must beSome("utf-8")
      }
    }
}

Config.IS_WEB_ENABLED的值定义为:

object Config {

  lazy val IS_WEB_ENABLED = Play.configuration.getBoolean("enable.webInterface").getOrElse(false)

}

正如您在测试中看到的那样,我尝试将 enable.webInterface 的配置设置覆盖为 false,因为 application.conf 文件默认将其设置为 true。但是 FakeApplication 没有获得新的配置值。

知道我在那里缺少什么吗?

【问题讨论】:

  • 在您的应用程序中使用它有效吗?它只在测试上下文中忽略它?

标签: scala playframework playframework-2.0 specs2


【解决方案1】:

使用def而不是lazy val,也许你之前使用过Config.IS_WEB_ENABLED,它被初始化为true并且只返回相同的结果,因为它是一个val。

object Config {

  def IS_WEB_ENABLED = Play.configuration.getBoolean("enable.webInterface").getOrElse(false)

}

【讨论】:

  • 当我第一次尝试时,我错过了 Nico_ekito 提到的“当前”参考。一旦我有电流,这就解决了。谢谢一百万!
【解决方案2】:

我怀疑Play.configuration 没有考虑到假申请。

所以试试这个(使用current):

object Config {

  lazy val IS_WEB_ENABLED = Play.current.configuration.getBoolean("enable.webInterface").getOrElse(false)

}

【讨论】:

  • 很遗憾,它不能解决问题:(虽然不错,但我确信是这个!
  • arf,我也有信心 ;-) 有什么方法可以打印出配置的内容?
  • 最终它似乎是您的答案和@Schleichardt 答案的组合。非常感谢!
【解决方案3】:

传入FakeApplicationMapMap[String, String],并且您正在从配置中请求一个布尔值。我怀疑该值没有被拾取,因为它没有正确的类型。如果你尝试会发生什么

Play.configuration.getString("enable.webInterface")

不是吗?

【讨论】:

    猜你喜欢
    • 2020-11-29
    • 2012-08-28
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多