6

Der Writing functional tests Teil der Dokumentation ist ziemlich skimpy und es fehlen Details zum vollständigen Übermitteln von Scheinformularwerten. Ich irgendwie (kann mich nicht erinnern, wie/wo) bestimmt man Grundform Werte (spöttisch eine POST-Anfrage) einreichen können durch eine Map-FakeRequest vorbei wie so:Wie testen Sie Aktionen, die eine hochgeladene Datei in Play Framework (Version 2.0, mit Scala) erwarten?

val Some(result) = routeAndCall(FakeRequest(POST, "/path/to/test", FakeHeaders(), 
           Map("postedVariable" -> Seq("and a value")))) 

jedoch, dass nicht zu erlauben scheint für der Fall einer "hochgeladenen" Datei.

+2

ersetzen Sie können ein paar Hinweise finden Sie hier: http://StackOverflow.com/Questions/10890381/Test-Multiformatdata-in-play-2-0-Fakerequest – forker

+0

Sei genial, dies zu sehen für Play 2.1.x aktualisiert zu haben – PlexQ

Antwort

10

Unsere Datei-Upload-Tests in etwa so aussehen:.

val tempFile = TemporaryFile(new java.io.File("/tmp/the.file")) 
val part = FilePart[TemporaryFile](key = "image", filename = "the.file", contentType = Some("image/jpeg"), ref = tempFile) 
val formData = MultipartFormData(dataParts = Map(), files = Seq(part), badParts = Seq(), missingFileParts = Seq()) 
val result = routeAndCall(FakeRequest(POST, "/path/to/test", FakeHeaders(), formData)) 

wo "image" der Name des HTML-Formularelement ist Sie erwarten, in den Inhalt der Datei zu finden

Wenn Sie BodyParsers.maxLength verwenden zu begrenzen die Größe von Uploads, können Sie formData durch Right(formData)

+0

Das ist, was ich brauchte! Bis auf ein Problem: Beim Erstellen der 'FakeRequest' musste ich den 'Right'-Wrapper entfernen, den Sie um' formData' hatten; Daher sollte die letzte Zeile lauten: 'val result = routeAndCall (FakeRequest (POST,"/Pfad/zu/Test ", FakeHeaders(), FormData))' –

+0

Und ich möchte auch darauf hinweisen, dass der 'key' Parameter für die 'FilePart' sollte der Name sein, den die Dateieingabe Ihres HTML-Formulars verwendet. –

+0

Entschuldigung, der "richtige" Wrapper war, weil wir 'BodyParsers.maxLength' verwenden, um die Größe der Uploads zu begrenzen. Ich habe vergessen, das auszublenden, als ich mein Beispiel baute. –