scala – 将Iteratee转换为Result
我正在为我的播放应用程序控制器编写测试用例,但我无法获得操作结果.
val jsonresult = UserController.importOPML()( FakeRequest(POST,"/user/import-opml",FakeHeaders(),data) .withCookies(cookie) ) 只有当Action被指定为parse.multipartFormData时才会有效,如果它被更改为parse.json
我不知道为什么,所以我换了 val Some(jsonresult ) = route( request ) 这次编译可以通过,但我的身份验证存根不能再通过了.造成这种奇怪错误的原因是什么?如果使用路由,为什么cookie不起作用. 解决方法
出现此问题是因为play.api.mvc.Action [A]包含以下两种apply方法:
// What you're hoping for def apply(request: Request[A]): Future[Result] // What actually gets called def apply(rh: RequestHeader): Iteratee[Array[Byte],Result] 请求[A]扩展了RequestHeader,因此这种情况下的A会产生重大影响.如果它与操作不匹配,您将调用错误的方法. 如果你的动作是Action [AnyContent],那么你必须传递一个Request [AnyContent] – Request [AnyContentAsJson]会工作,但是FakeRequest [JsValue]不会,因为只有前者是一个Request [AnyContent]. 将ActionBuilder与BodyParser [A]一起使用时,可以创建一个Action [A].因此,您需要一个Request [A]进行测试,这意味着您问题中的数据类型至关重要. > parse.json返回BodyParser [JsValue],因此数据必须是JsValue (注意:自从你提出这个问题以来已经有一段时间了,所以我用Play 2.3回答它,而不是你问的时候使用的2.2.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |