我为我的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进行单元测试。有人可以帮我一点吗?
由于
托本
答案 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")
答案 1 :(得分:-1)
没有回答你的问题,但requestHeader.session + ("importantValue", cookie.value)
永远不会做任何事情。您正在创建一个新的会话对象,并且不对其执行任何操作。