我一直在努力奋斗几个小时,每次发送FakeRequest时,似乎FakeApplication都会收到一个空洞的身体。但是,如果我尝试运行播放应用程序并向localhost发送正常请求,一切都按预期工作,我会收到我发送的文本作为回复。
我所做的测试的另一项测试是从控制器发送自定义响应(不一样),如字符串“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
答案 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]。这可能是一个错误。