我目前正在为 Play Framework 2.2.x 应用程序编写一些 Specs2 测试,该应用程序接受 MultipartFormData 提交作为其功能的一部分。
我已经使用以下形式成功地使用文本和 JSON 主体编写了其他测试:
"respond to POST JSON with description field present" in {
running(FakeApplication()) {
val response = route(FakeRequest(POST, "/submission.json").withJsonBody(toJson(Map("content" -> toJson("test-content"), "description" -> toJson("test-description"))))).get
status(response) must equalTo(OK)
contentType(response) must beSome.which(_ == "application/json")
contentAsString(response) must contain(""""description":"test-description"""")
contentAsString(response) must contain(""""content":"test-content"""")
}
}
但是,当我使用 .withMultipartFormData 方法时,出现以下错误:
Cannot write an instance of play.api.mvc.AnyContentAsMultipartFormData to HTTP response. Try to define a Writeable[play.api.mvc.AnyContentAsMultipartFormData]
val response = route(FakeRequest(PUT,"/submission.json/1/files").withMultipartFormDataBody(data)).get
^
我一直在尝试调试的 MultipartFormData 测试的形式为:
"respond to file PUT form with details not specififed" in {
running(FakeApplication()) {
val basePath:String = Play.application.path.getCanonicalPath();
val data:MultipartFormData[TemporaryFile] = MultipartFormData(Map[String,Seq[String]](),
List(
FilePart("file_upload","",Some("Content-Type: multipart/form-data"),TemporaryFile(new java.io.File(basePath + "/test-data/testUpload.jpg")))
),
List(),
List())
val response = route(FakeRequest(PUT,"/submission.json/1/files").withMultipartFormDataBody(data)).get
status(response) must equalTo(CREATED)
}
}
查看 Play Framework 文档中 FakeRequest 类的相关版本,我看不到太多内容来帮助我追踪问题:play.api.test.FakeRequest http://www.playframework.com/documentation/2.2.x/api/scala/index.html#play.api.test.FakeRequest
就有关此事的其他文档而言,Play Framework 网站和 Google 似乎相当缺乏。
我尝试了以下替代方法来尝试测试我的 MultipartFormData 代码:
- 在 Play 2.1 和 Scala 中编写文件上传测试用例 https://stackoverflow.com/questions/15133794/writing-a-test-case-for-file-uploads-in-play-2-1-and-scala
- 在 Play 2.0 FakeRequest 中测试 MultipartFormData https://stackoverflow.com/questions/10890381/test-multipartformdata-in-play-2-0-fakerequest
-
如何使用 Java 在 Play Framework 2.0 中测试文件上传的多部分表单数据请求? https://stackoverflow.com/questions/12970953/how-do-i-test-multipart-form-data-requests-for-file-uploads-in-play-framework-2(首先翻译成 Scala 代码)。
然而,我在这些方法中也没有取得任何成功。