加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 找到“play.api.libs.iteratee.Iteratee [Array [Byte]

发布时间:2020-12-16 18:03:55 所属栏目:安全 来源:网络整理
导读:使用Play 2.1-RC1我不能写简单的测试. 这是动作代码: def echoTestTagFromXml = Action(parse.xml) { request = (request.body "test" headOption).map(_.text).map { test = Ok(views.xml.testTag(test)) }.getOrElse { BadRequest("Missing parameter [
使用Play 2.1-RC1我不能写简单的测试.

这是动作代码:

def echoTestTagFromXml = Action(parse.xml) { request =>
    (request.body  "test" headOption).map(_.text).map { test =>
        Ok(views.xml.testTag(test))
    }.getOrElse {
      BadRequest("Missing parameter [name]")
    }
}

这是测试代码:

"Test Tag Xml Echo" in {
    running(FakeApplication()) {
      val req = new FakeRequest(POST,controllers.routes.SimpleResultsController.echoTestTagFromXml().url,FakeHeaders(),Xml("<test>gg</test>"))        
      val result = controllers.SimpleResultsController.echoTestTagFromXml()(req)
      status(result) must equalTo(OK)
    }
}

测试给出错误:

[error]  found   : play.api.libs.iteratee.Iteratee[Array[Byte],play.api.mvc.Result]
[error]  required: play.api.mvc.Result

来自谷歌,我知道问题出在BodyParser中.但我不知道(在API调查之后)如何使代码工作.

解决方法

下面修改过的测试代码应该可以工作,但我认为当前尝试将一个主体传递给一个FakeRequest时有一个错误,有点是一个宿醉,现在功能测试已经弃用了’routeAndCall’功能.身体总是空的.

"Test Tag Xml Echo" in {
  running(FakeApplication()) {
    val req = FakeRequest(POST,Xml("<test>gg</test>"))
      .withHeaders(CONTENT_TYPE -> "text/xml")
    val result = await(controllers.SimpleResultsController.echoTestTagFromXml()(req).run)
    contentAsString(result) must equalTo("gg")
    status(result) must equalTo(OK)
  }
}

我有一个类似的问题,将Json传递到身体,但试图让这适用于你的身体解析器(注意差异).另外,请设置内容类型标题.

但是,您可以使用“路线”功能:

"Test Tag Xml Echo Route" in {
  running(FakeApplication()) {
    val result = route(FakeRequest(POST,"/SimpleResultsController").withHeaders(CONTENT_TYPE -> "text/xml"),Xml("<test>gg</test>")).get
    contentAsString(result) must equalTo("gg")
    status(result) must equalTo(OK)
  }
}

这似乎对我有用,你应该能够复制/粘贴这个解决方案.

如果您不想以字符串形式重复路由,则可以像以前一样使用反向路由:controllers.routes.SimpleResultsController.echoTestTagFromXml().url

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读