【问题标题】:How to write tests for a Play Framework Filter?如何为 Play Framework Filter 编写测试?
【发布时间】:2015-09-15 21:37:36
【问题描述】:

我为我的 Play 应用程序编写了一个过滤器:

object MyFilter {
  def apply() = new MyFilter()
}

class MyFilter extends EssentialFilter {
  def apply(next: EssentialAction) = new EssentialAction {
    def apply(requestHeader: RequestHeader) = {

      requestHeader.cookies.get("myCookie") match {
        case Some(cookie) => {
          requestHeader.session + ("importantValue", cookie.value)
          next(requestHeader)
        }
        case None => {
          val importantValue = ... // retrieve the value from somewhere
          requestHeader.session + ("importantValue", importantValue)
          next(requestHeader).map(_.withCookies(Cookie("importantValue", value)))
      }

    }
  }
}

Play 文档中有很多关于如何编写测试的示例,但我不知道如何对 MyFilter 进行单元测试。有人可以帮帮我吗?

谢谢

托本

【问题讨论】:

标签: scala playframework playframework-2.0


【解决方案1】:

播放框架源代码显示过滤器测试。 例如:

val filter = SecurityHeadersFilter()
// Play.current is set at this point...
val rh = FakeRequest()
val action = Action(Ok("success"))
val result = filter(action)(rh).run()

header(X_FRAME_OPTIONS_HEADER, result) must beSome("DENY")

取自这里SecurityHeadersFilterSpec.scala

【讨论】:

    【解决方案2】:

    不回答您的问题,但requestHeader.session + ("importantValue", cookie.value) 永远不会做任何事情。您正在创建一个新的会话对象,但不对其进行任何操作。

    【讨论】:

    • 哦,是的......从未测试过代码。嗯......在第一次请求时将我的“importantValue”从过滤器传递到控制器的最佳方式是什么?
    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2017-08-25
    • 2014-09-14
    • 2019-11-19
    • 2017-08-15
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多