Contenido del curso
Conceptos
- 5

Verificación de Resultados en Pruebas Unitarias con PHPUnit
07:09 min - 6

Testing de Helpers en PHP con PHPUnit
07:26 min - 7

Pruebas Unitarias en Laravel: Mutadores y Campos Virtuales
08:29 min - 8

Pruebas de Métodos Personalizados en PHP con Laravel
04:56 min - 9

Testing de Carga de Archivos en Laravel
Viendo ahora - 10

Creación de Formulario HTML para Carga de Imágenes en Servidor
04:47 min - 11

Refactorización y Testing en Proyectos de Programación
04:48 min - 12

Validación de Formularios y Testing en Laravel
06:12 min - 13

Pruebas de Datos en Bases de Datos con PHP y Laravel
08:41 min
Proyecto
- 14

Metodología TDD en PHP: Creación y Pruebas Efectivas
04:37 min - 15

Desarrollo de un Proyecto Sencillo con Enfoque en Testing
01:34 min - 16

Pruebas HTTP en PHP con Artisan y Base de Datos
08:48 min - 17

Test de Visualización de Datos en Tabla de Etiquetas
05:36 min - 18

Configuración de Pruebas Unitarias para Crear Registros en Laravel
07:35 min - 19

Eliminación de registros en base de datos con Laravel
05:59 min - 20

Validación
03:16 min - 21

Pruebas de Funcionalidad de Etiquetas en Laravel desde el Navegador
05:25 min - 22

Mejorando el Diseño de Proyectos con Tailwind CSS
06:37 min - 23

Pruebas Unitarias en PHP: Creación y Verificación de Campos Virtuales
05:58 min
Conclusión
Testing de Carga de Archivos en Laravel
Resumen
Verificar que la carga de archivos funciona correctamente antes de construir la interfaz es una práctica que distingue a los desarrolladores que aplican TDD (Test Driven Development). En Laravel, esto es posible gracias a herramientas integradas que permiten simular archivos y discos de almacenamiento sin tocar el sistema real.
¿Cómo crear un test de carga de imágenes en Laravel?
El punto de partida es generar un archivo de prueba con el comando php artisan make:test ProfileTest [00:18]. Este comando crea una clase dentro de la carpeta de tests donde se define el comportamiento esperado. En este caso, el método se llama carga y su propósito es comprobar que una imagen se sube correctamente al servidor.
Para lograrlo se importan dos clases fundamentales:
Illuminate\Http\UploadedFile: permite crear archivos ficticios que simulan una imagen real [01:06].Illuminate\Support\Facades\Storage: da acceso al sistema de archivos y permite trabajar con discos falsos [01:18].
La clase UploadedFile expone el método fake(), que genera un archivo simulado. En el ejemplo se crea una imagen llamada photo.png [02:10]. Por otro lado, Storage::fake() configura un disco de almacenamiento temporal que no afecta el entorno real del proyecto [01:50].
¿Qué afirmaciones se utilizan dentro del test?
Dentro del test se realizan dos verificaciones clave:
- assertExists: confirma que el archivo subido realmente se encuentra en la carpeta
profilesdel disco configurado [02:40]. Se accede al nombre del archivo mediante$foto->hashName(), que devuelve el nombre generado automáticamente por Laravel. - assertRedirect: valida que después de guardar la imagen, el sistema redirige a la ruta
profilemediante una petición GET [03:08].
El método $this->post() simula el envío de un formulario con el archivo adjunto, sin necesidad de crear una vista ni abrir el navegador [01:57]. Esto es precisamente lo valioso del testing: probar la lógica de forma aislada.
¿Cómo programar la funcionalidad que hace pasar el test?
Al ejecutar el test por primera vez, falla [03:25]. Esto es esperado porque aún no existe la ruta ni el código que procese la carga. El flujo de TDD dicta que primero se escribe lo que se espera y después se desarrolla la funcionalidad.
La configuración de rutas requiere dos entradas en el archivo web.php:
- Una ruta GET hacia
/profileque retorna una vista [03:50]. - Una ruta POST hacia
/profileque recibe el request y ejecuta la carga [04:05].
php Route::get('profile', function () { return view('profile'); });
Route::post('profile', function (Illuminate\Http\Request $request) { $request->file('foto')->store('profiles'); return redirect('profile'); });
El método store('profiles') del objeto archivo se encarga de guardar la imagen dentro de la carpeta profiles del disco local [04:30]. Después, redirect('profile') envía al usuario de vuelta a la vista del perfil.
¿Dónde se almacenan los archivos durante el testing?
Cuando el test se ejecuta con Storage::fake('local'), Laravel crea una estructura temporal dentro de storage/framework/testing/disks/local/profiles [05:10]. Cada ejecución genera una nueva imagen ficticia en esa ubicación, lo que permite verificar visualmente que el proceso funciona.
Es importante distinguir entre el disco real y el disco fake. El disco falso existe solo durante la prueba y evita contaminar el almacenamiento del proyecto con archivos de prueba.
¿Por qué escribir el test antes del código?
Esta práctica garantiza que cada funcionalidad nueva tenga cobertura de pruebas desde el inicio. Al ver que el test falla primero y luego pasa tras implementar el código [05:02], se obtiene confianza de que la lógica cumple exactamente con lo definido. No se trata solo de verificar que "algo funcione", sino de documentar el comportamiento esperado del sistema.
La vista profile.blade.php se crea vacía inicialmente [04:48] para que el test pase sin errores. La construcción del formulario HTML y la experiencia visual en el navegador se desarrollan en un paso posterior, separando la lógica de negocio de la presentación.
¿Has implementado testing para la carga de archivos en tus proyectos? Comparte tu experiencia o dudas en los comentarios.