Testing de Proyectos Laravel con PHPUnit y Artisan

Clase 3 de 24Curso Básico de Testing con PHP y Laravel

Contenido del curso

Conceptos

Proyecto

Resumen

Laravel incluye de forma nativa todo lo necesario para ejecutar pruebas automatizadas con PHPUnit, lo que permite comenzar a testear desde el primer momento sin configuraciones adicionales. Entender cómo está organizada la estructura de archivos y carpetas de testing es el primer paso para escribir pruebas efectivas en cualquier proyecto.

¿Cómo crear un proyecto de Laravel listo para testing?

El proceso inicia abriendo un terminal y ubicándose en la carpeta de proyectos. Desde ahí se ejecuta el comando laravel new seguido del nombre del proyecto [01:00]. En este caso, el proyecto se llama php unit para reflejar el enfoque en pruebas automatizadas.

bash laravel new phpunit

Una vez finalizada la instalación, se conecta el editor de código con la carpeta del proyecto mediante Open Folder [01:30]. Esto permite visualizar toda la estructura que Laravel genera automáticamente:

  • Carpeta de código principal, HTTP y modelos.
  • Carpeta de configuración y base de datos.
  • Archivos públicos, vistas y rutas.
  • Carpeta de test, dedicada exclusivamente al testing.

¿Qué contiene la carpeta de testing en Laravel?

Laravel organiza las pruebas dentro de la carpeta tests, que a su vez se divide en dos subcarpetas principales [02:20]:

  • Unit: pruebas unitarias que verifican porciones pequeñas y aisladas de código.
  • Feature: pruebas funcionales que evalúan comportamientos más complejos, como acceder a una ruta y validar la respuesta.

El archivo phpunit.xml ya viene preconfigurado [02:05]. A diferencia de un proyecto PHP puro donde se crea manualmente este archivo, Laravel lo incluye con la configuración necesaria para que las pruebas se ejecuten sin pasos adicionales.

¿Qué ejemplos trae Laravel por defecto?

Dentro de la carpeta Feature existe un archivo que verifica que al acceder a la ruta principal (home) se reciba un status HTTP 200 [02:50]. Este concepto de códigos de estado HTTP es fundamental y se conecta directamente con el desarrollo de APIs.

En la carpeta Unit se encuentra un archivo con una afirmación básica: assertTrue(true) [03:10]. Es la prueba más simple posible, pero sirve como punto de partida para comprender la mecánica de las aserciones.

¿Cómo ejecutar las pruebas desde el terminal?

Existen dos formas de correr las pruebas. La primera utiliza directamente el binario de PHPUnit [03:30]:

bash vendor/bin/phpunit

Este comando conecta con todas las pruebas configuradas y muestra el resultado. Por ejemplo, con los archivos por defecto se obtienen dos tests y dos aserciones correctas.

Si dentro de un mismo test se duplica una aserción, el resultado cambia. Al copiar y pegar assertTrue(true) dos veces dentro del mismo método, el reporte indica dos tests y tres aserciones [04:00]. Cada llamada a un método de aserción cuenta de forma independiente.

¿Cuál es el comando alternativo con Artisan?

La segunda forma es usar el comando propio de Laravel [05:00]:

bash php artisan test

Este comando presenta una estructura visual diferente, más descriptiva. Muestra el nombre de cada test, el archivo donde se encuentra y si pasó o falló. Ambas opciones ejecutan las mismas pruebas, pero php artisan test ofrece una salida más legible.

¿Qué estándares de nomenclatura se deben seguir?

Para que PHPUnit reconozca los archivos y métodos correctamente, se deben respetar ciertas convenciones [04:30]:

  • Los archivos de prueba deben terminar en Test.php. Por ejemplo, para probar el modelo User, el archivo correcto sería UserTest.php.
  • Los métodos de prueba deben comenzar con la palabra test. Un método llamado testBasic será detectado automáticamente como prueba.
  • También se puede usar la anotación @test en el docblock, permitiendo nombres de método sin el prefijo.

Estas reglas garantizan que el test runner identifique y ejecute cada prueba sin ambigüedades.

La base está lista: un proyecto configurado, carpetas organizadas y comandos disponibles. ¿Ya has trabajado con pruebas automatizadas en tus proyectos? Comparte tu experiencia en los comentarios.