Spielen Sie Framework-Tests mit MultipartFormData in einer FakeRequest

Ich bin gerade dabei, einige Specs2-Tests für die Anwendung Play Framework 2.2.x zu schreiben, die als Teil ihrer Funktion MultipartFormData-Übermittlungen akzeptiert.

Ich habe erfolgreich andere Tests mit Text- und JSON-Körpern unter Verwendung des folgenden Formulars geschrieben:

"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"""")
  }
}

Wenn ich jedoch die .withMultipartFormData-Methode verwende, werden folgende Fehler angezeigt:

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
                    ^

Der MultipartFormData-Test, den ich zu debuggen versucht habe, hat die Form:

"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)
 }
}

Wenn ich die Play Framework-Dokumentation für die relevante Version der FakeRequest-Klasse betrachte, kann ich nicht allzu viel erkennen, um das Problem aufzuspüren:play.api.test.FakeRequest

Und in Bezug auf andere Dokumentation zu diesem Thema scheinen die Play Framework-Website und Google eher zu fehlen.

Ich habe die folgenden alternativen Methoden zum Testen meines MultipartFormData-Codes ausprobiert:

Schreiben eines Testfalls für das Hochladen von Dateien in Play 2.1 und ScalaTesten Sie MultipartFormData in Play 2.0 FakeRequestWie teste ich mehrteilige Formulardatenanforderungen für das Hochladen von Dateien in Play Framework 2.0 mit Java? (Zuerst in Scala-Code übersetzen).

Ich habe jedoch auch mit keinem dieser Ansätze Erfolg gehabt.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage