json - Play框架和Scala : Problems with FakeRequest & JSON POST in unit test

标签 json unit-testing scala playframework

我花了太多时间尝试调试以下问题,但我不确定问题发生在哪里。

问题:获取 400 Bad Request, Invalid Json 作为响应,但出现以下异常:

com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
 at [Source: [B@6ee503c9; line: 1, column: 1]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164) ~[jackson-databind.jar:2.2.2]
    at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:2931) ~[jackson-databind.jar:2.2.2]
    at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:2846) ~[jackson-databind.jar:2.2.2]
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1569) ~[jackson-databind.jar:2.2.2]
    at play.api.libs.json.JacksonJson$.parseJsValue(JsValue.scala:480) ~[play-json_2.10.jar:2.2.0]
    at play.api.libs.json.Json$.parse(Json.scala:27) ~[play-json_2.10.jar:2.2.0]

要在我的 Controller 中测试的方法:

  def createArticle(id: String) =
      Action.async(parse.json) { implicit request =>
        (request.body \ "content").asOpt[String].map {
            ............
            ............
        }.getOrElse(BadRequest("Invalid request body"))
      }

对应的单元测试:

  "create article" in {
    running(FakeApplication()) {
      val postJson = Json.obj("content" -> "article content")

      val result = resource.createArticle(ARTICE_ID)(FakeRequest(POST, controllers.routes.ArticleResource.create(ARTICLE_ID).url).withJsonBody(postJson).withHeaders(CONTENT_TYPE -> "application/json").run

      status(result) must equalTo OK
    }
  }

我阅读了讨论here但那里的建议都没有帮助。

最佳答案

我遇到了类似的问题,但到目前为止还没有解决它们(无论如何,优雅地......)。由于我的环境是java而不是scala,我只能给出一个预感。我认为当您发送帖子时,它可能是异步完成的(创建文章方法中的 Action.async),因此您可能需要等待测试代码结果,然后再尝试查看是否正常。

关于json - Play框架和Scala : Problems with FakeRequest & JSON POST in unit test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19696007/

相关文章:

javascript - 唯一属性计数 json

java - 将两种类型的json转换为同一个对象

c# - C# 中的 PrivateObject 与 PrivateType 有什么区别?

scala - 将函数应用于列表列表内的元素

scala - 多函数中的类型删除,scala

string - 字符串插值与串联

mysql - 附加到 JSON 字段的 MySQL 的 GoLang 查询

javascript - 使用 jQuery/AJAX 从 Cherrypy 服务器获取 JSON 数据

javascript - 如何模拟回调函数接收到的数据(参数),以便可对于Jest地测试回调函数中的逻辑? (例如 fs.readFile)

unit-testing - 何时使用严格模拟?