Playframework测试。 FakeRequest一直发送空身(scala)

时间:2017-08-02 16:11:57

标签: scala testing playframework playframework-2.0

我一直在努力奋斗几个小时,每次发送FakeRequest时,似乎FakeApplication都会收到一个空洞的身体。但是,如果我尝试运行播放应用程序并向localhost发送正常请求,一切都按预期工作,我会收到我发送的文本作为回复。

enter image description here

我所做的测试的另一项测试是从控制器发送自定义响应(不一样),如字符串“a”。

我的测试代码如下:

      val controller = app.injector.instanceOf(classOf[CreateRecordController])
  val js = Json.obj()
  val result = controller.apply().apply(
    FakeRequest(POST, "/api/v1/record/")
      .withHeaders(Headers(CONTENT_TYPE -> "application/json"))
      .withJsonBody(js)
  )

  val content = contentAsJson(result)

  info.apply(s"content was $content")

最后一个语句打印:“content was”和一个html页面说:“对于请求'POST / api / v1 / record /'[无效的Json:由于输入结束没有要映射的内容  在[来源:akka.util.ByteIterator$ByteArrayIterator$$anon$1@5fdfe8cf; line:1,column:0]]“ - >所以内容为空。

控制器中的动作处理程序是:

  def apply: Action[JsValue] = Action.async(parse.json) { implicit request =>

          Future.successful(BadRequest(request.body).withHeaders("Content-type" -> "application/json"))

   }

我错过了什么吗?

播放版本:2.6.2

2 个答案:

答案 0 :(得分:2)

在这里,首先阅读 - https://www.playframework.com/documentation/2.6.x/ScalaEssentialAction

控制器

ID     Title    Item
ID1    Title1   Item1
ID2    Title2   Item2
ID3    Title3   Item3
...    ...      ...

测试

  def work = Action.async(parse.json) { implicit request =>
    Future.successful(BadRequest(request.body).withHeaders((CONTENT_TYPE, "application/json")))
  }

答案 1 :(得分:1)

似乎如果内容在构建时传递给FakeRequest,它会按预期工作。我所看到的是,如果我在构造时将JsValue作为正文传递,则FakeRequest的类型为FakeRequest [JsValue],它可以正常工作。但是如果使用方法.withBodyAsJson,则类型变为FakeRequest [AnyContentAsJson]。这可能是一个错误。