Play Framework Testing przy użyciu MultipartFormData w FakeRequest
Obecnie piszę testy Specs2 dla aplikacji May Play Framework 2.2.x, która akceptuje zgłoszenia MultipartFormData jako część swojej funkcji.
Z powodzeniem napisałem inne testy z tekstem i obiektami JSON przy użyciu następującej formy:
"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"""")
}
}
Jednak gdy używam metody .withMultipartFormData, otrzymuję następujące błędy:
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
^
Test MultipartFormData, który próbowałem debugować, ma postać:
"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)
}
}
Patrząc na dokumentację Play Framework dla odpowiedniej wersji klasy FakeRequest nie widzę zbyt wiele, aby pomóc mi prześledzić problem:play.api.test.FakeRequest
A jeśli chodzi o inną dokumentację na ten temat, wydaje się, że brakuje witryny Play Framework i Google.
Spróbowałem wypróbować następujące alternatywne sposoby próbowania mojego kodu MultipartFormData:
Pisanie przypadków testowych do przesyłania plików w Play 2.1 i ScalaTest MultipartFormData w Play 2.0 FakeRequestJak przetestować żądania danych wieloczęściowych formularzy dotyczące przesyłania plików w Play Framework 2.0 przy użyciu Java? (Najpierw tłumaczenie na kod Scala).Jednak nie odniosłem żadnego sukcesu w żadnym z tych podejść.