6

La parte della documentazione di Writing functional tests è piuttosto succinta e manca di dettagli sull'invio completo dei valori dei moduli fittizi. Io in qualche modo (non riesco a ricordare come/dove) determinato è possibile inviare i valori della forma di base (beffardo una richiesta POST) passando un Map-FakeRequest in questo modo:Come testare le azioni che prevedono un file caricato in Play Framework (versione 2.0, utilizzando Scala)?

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

Tuttavia, che non sembra per consentire il caso di un file "caricato".

+2

È possibile trovare un paio di suggerimenti qui: http://stackoverflow.com/questions/10890381/test-multipartformdata-in-play-2-0-fakerequest – forker

+0

Sii fantastico vedere questo aggiornamento per Play 2.1.x – PlexQ

risposta

10

I nostri test di upload di file simile a questo:.

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

dove "image" è il nome dell'elemento form HTML che ci si aspetta di trovare il contenuto del file in

Se si utilizza BodyParsers.maxLength per limitare la dimensione dei caricamenti, è possibile sostituire formData con Right(formData)

+0

Questo è quello che mi serviva! Tranne un problema: quando costruivo 'FakeRequest', dovevo rimuovere il wrapper' Right' che avevi in ​​'formData'; quindi, l'ultima riga dovrebbe essere: 'val result = routeAndCall (FakeRequest (POST,"/path/to/test ", FakeHeaders(), formData))' –

+0

E voglio anche notare che il parametro 'key' per il 'FilePart' dovrebbe essere il nome utilizzato dal file di input del modulo HTML. –

+0

Siamo spiacenti, il wrapper 'Right' era perché usiamo' BodyParsers.maxLength' per limitare le dimensioni dei caricamenti. Ho dimenticato di spogliarlo quando costruisco il mio esempio. –

Problemi correlati