如何为Play Framework Filter编写测试?

时间:2014-04-25 07:17:26

标签: scala playframework playframework-2.0

我为我的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进行单元测试。有人可以帮我一点吗?

由于

托本

2 个答案:

答案 0 :(得分:5)

play框架源代码显示了过滤器的测试。 例如:

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

答案 1 :(得分:-1)

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