我目前正在为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)
}
}
查看相关版本的FakeRequest类的Play Framework文档,我看不到太多帮助我追查问题: play.api.test.FakeRequest
就其他有关此事的文件而言,Play Framework网站和谷歌似乎相当缺乏。
我尝试了以下尝试测试我的MultipartFormData代码的替代方法:
- 在Play 2.1和Scala中编写用于文件上载的测试用例
- 在Play 2.0 FakeRequest中测试MultipartFormData
- 如何使用Java在Play Framework 2.0中测试文件上载的多部分表单数据请求? (首先转换为Scala代码)。
但是,我也没有任何成功的方法。