que plantillas motor index for entre diferencias descargar content ciclo laravel file-upload laravel-5 phpunit laravel-5.2

plantillas - laravel request validation



Laravel 5.2 | La prueba de UploadedFile pierde el valor $ test después de la publicación. ¿Error? (1)

Explicación

Esto es realmente algo interesante. Ya has notado mucho al crear esta publicación (si alguien tiene el problema, léelo con cuidado).

En esta https://github.com/laravel/framework/commit/5062a9b42632e55ee90b7397141c0b12622447e1 como ya lo mencionó $testing se quitó el parámetro de $testing y se simplificó el código de clases al eliminar Reflection para obtener la testing valor de propiedad de Symfony/Component/HttpFoundation/File/UploadedFile .

Y ahora lo más complicado es que, dependiendo de lo que esté probando, es posible que no note el cambio y que todo funcione, pero en algunos casos no lo hará y no sabrá realmente por qué.

Por ejemplo, todo podría funcionar: el archivo se cargará sin problemas, pero si lo agrega a su clase de solicitud, por ejemplo, la regla de los mimes :

''logo'' => [''mimes:jpeg,png''],

fallará diciéndole que el archivo tiene un mimo no válido (esto es porque internamente también se verificará si el archivo fue realmente cargado y en el caso de las pruebas, de hecho, no es lo mismo que la carga real).

La solución está mirando nuevamente lo que realmente cambió en la confirmación y cómo se ve el método. En este archivo, la instancia del archivo cargado se devuelve así:

return $file instanceof static ? $file : new static( $file->getRealPath(), $file->getClientOriginalName(), $file->getClientMimeType(), $file->getClientSize(), $file->getError() );

por lo tanto, en caso de que el archivo sea instancia de esta clase, devolverá esta instancia sin modificar, de lo contrario creará el objeto ahora sin pasar el argumento $testing al constructor de la clase.

Solución

Entonces, para resolver esto, al probar las cargas de archivos no deberías usar

/Symfony/Component/HttpFoundation/File/UploadedFile

clase más. Ahora deberías usar

/Illuminate/Http/UploadedFile

para no tener ningún problema extraño cuando se prueban las cargas de archivos (por supuesto, todavía debe pasar a este constructor de objetos true como parámetro $testing pero ahora se usará más adelante sin problema)

Actualización 2016/04/26 11:30 GMT + 2 Solución

Desde Laravel 5.2.15, el parámetro $ test se elimina, pero no hay una razón clara, porque Symfony''s UploadedFile todavía tiene el parámetro $ test.

Una solución alternativa es utilizar Laravel 5.2.14 provisionalmente.

Actualización 2016/04/26 11:00 GMT + 2

El archivo UploadedFile de Laravel no pasa el parámetro $ test. Vea estos recursos:

Lo sé, hay otra pregunta: cómo probar la carga de archivos en Laravel 5.2 , pero la respuesta marcada no funciona para mí.

Caso de prueba

Creo una instancia de la clase UploadedFile de Symfony y establezco $test en true . Publiqué el archivo en file/upload .

class FileControllerTest extends TestCase { use /Illuminate/Foundation/Testing/DatabaseTransactions; private $file; public function setUp() { parent::setUp(); $this->file = new Symfony/Component/HttpFoundation/File/UploadedFile( public_path() . ''/examples/example.jpg'', ''example.jpg'', ''image/jpeg'', filesize(public_path() . ''/examples/example.jpg''), null, true // for $test ); } /** @test */ public function it_uploads_a_valid_file() { var_dump($this->file); // $test = true $this->call(''POST'', ''file/upload'', [], [], [''file'' => $this->file], [''accept'' => ''application/json'']); $this->assertResponseOk(); } }

Controlador

namespace App/Http/Controllers; class FileController extends Controller { public function upload(Request $request) { var_dump($request->file(''file'')); // $test = false return []; } }

Problema

  • El archivo para publicar tiene el argumento true para $test
  • El archivo publicado llega a la upload()
  • $request->file(''file'') contiene los argumentos correctos, pero

    $ test es falso

Parece que el argumento $ test no ha pasado por la llamada posterior. ¿Es esto un error?