©2025 Escuela Tecnologías de la Información S.L. Todos los derechos reservados.
Curso Testing con Laravel
Laravel, PHPUnit, pruebas unitarias, pruebas funcionales, pruebas de integración.
Material disponible
Laravel es uno de los frameworks más destacados para el desarrollo de aplicaciones web. Desarrollado en PHP, fomenta un desarrollo de alta calidad, escalable y apoyado por numerosos patrones y buenas prácticas. Ha tenido una progresión siempre ascendente, llegando a conquistar la mayor comunidad de desarrolladores de la historia de los frameworks backend.
Por supuesto, entre las técnicas más habituales de Laravel encontramos el desarrollo de pruebas del software, una necesidad para crear código que nos asegure un funcionamiento robusto a lo largo de todo el tiempo de mantenimiento de las aplicaciones, básica para técnicas ágiles como el refactoring o la integración y despliegue continuos.
En EscuelaIT tenemos numerosos cursos donde abordamos este framework, que puedes ver en el plan de estudios de Laravel. En esta ocasión llega el turno del desarrollo de pruebas unitarias, que permite cerrar el círculo de la formación avanzada de Laravel.
Por supuesto, entre las técnicas más habituales de Laravel encontramos el desarrollo de pruebas del software, una necesidad para crear código que nos asegure un funcionamiento robusto a lo largo de todo el tiempo de mantenimiento de las aplicaciones, básica para técnicas ágiles como el refactoring o la integración y despliegue continuos.
En EscuelaIT tenemos numerosos cursos donde abordamos este framework, que puedes ver en el plan de estudios de Laravel. En esta ocasión llega el turno del desarrollo de pruebas unitarias, que permite cerrar el círculo de la formación avanzada de Laravel.
Qué aprenderé en el Curso Testing con Laravel
Objetivos del curso
En este curso de pruebas de software con Laravel, los estudiantes aprenderán a realizar tests en aplicaciones desarrolladas con este framework. Explorarán el uso de PHPUnit y las herramientas integradas en Laravel, además de técnicas avanzadas para llevar a cabo pruebas de integración, incluyendo la validación de aplicaciones que interactúan con bases de datos o servicios externos.
Por qué debes aprender Testing con Laravel
Qué tengo que saber
Para poder aprovechar este curso de Testing con Laravel es necesario tener un conocimiento sólido de PHP y al menos medio sobre el framework Laravel. Además debes disponer de los conocimientos impartidos durante el curso de Testing en PHP Unit.
Clases y contenidos
Introducción Testing con Laravel
Generalidades de testing de aplicaciones Laravel, organización de los test, ejecución de los test de manera secuencial o en paralelo. Definición del entorno de testing y distintas localizaciones de las variables de entorno.
En este vídeo se explica el enfoque del curso, los contenidos que va a comprender y los objetivos que se persiguen. Además se darán referencias de otros cursos que sería importante realizar antes que este.
En este vídeo se muestra la creación de un proyecto nuevo de Laravel. Se analizan las carpetas donde se colocará el código de la aplicación y el código de test, diferenciando los tipos de test: unitarios, features y browser. Se explicarán otros archivos de configuración de Laravel que tienen relación con el testing y se ejecutarán los primeros test que vienen instalados en el framework.
Vamos a ver más aspectos que tienen que ver con la ejecución de los test en una aplicación Laravel. Veremos cómo personalizar el funcionamiento de la ejecución de los test y además estudiaremos las variables de entorno que podemos asignar de manera específica para la ejecución de las pruebas en Laravel.
Desarrollo de los primeros test en Laravel
Explicamos cómo puedes crear tus primeros tests en una aplicación Laravel. Cómo realizar tests unitarios en una aplicación de Laravel. Cómo realizar pruebas funcionales también llamadas en Laravel como Feature test. Debug de las pruebas en Laravel.
En este primer vídeo práctico sobre la creación de test vamos a aprender los modos en los que podemos definir métodos de test en las clases de pruebas. Veremos diversos métodos para decorar los métodos de test, de manera que podamos decirle a PHPUnit que los ejecute cuando se lance el proceso que corre las pruebas. Nos quedaremos con el método más moderno y aceptado para decorar los métodos de test, basado en atributos del lenguaje PHP.
Comenzamos con la práctica de nuestros primeros test en Laravel mostrando cómo se crea un test unitario, en los que tendremos básicamente todo lo que nos ofrece PHPUnit.
Una clase de repaso de los data providers, que funcionan exactamente igual que lo que ya conoces de PHPUnit.
Veamos nuestro primer test de feature en Laravel, lo que llamamos en español pruebas funcionales. Será una clase práctica para ver lo mucho que Laravel nos facilita la vida para probar rutas y examinar las respuestas.
Desarrollo de pruebas funcionales
Detalle del desarrollo de las pruebas de feature en Laravel. Cómo probar funcionalidades de manera completa, cómo probar pruebas que envían datos por formulario.
Veamos en detalle cómo realizar pruebas de HTTP en Laravel. Explorando distintos tipos de asserts ofrecidos por el framework para las pruebas de funcionalidad.
Seguimos con el testing de funcionalidades HTTP en Laravel. En esta clase veremos cómo probar páginas que reciben datos por Post.
En este vídeo veremos algunas aserciones útiles para probar que se invocan a las vistas esperadas y que se le envían datos específicos.
Un ejemplo un poco más elaborado de test end to end, para probar la funcionalidad de login de usuarios en una aplicación Laravel.
Desarrollo de pruebas de validación
Testing de los errores del sistema de validación integrado en el framework Laravel.
En este vídeo te vamos a mostrar cómo testear las rutas que reciben datos que deben ser validados con el sistema de validaciones de Laravel. Veremos cómo asertar que los datos son válidos o inválidos y cómo asertar también que los mensajes de error son los que se esperan.
En este bloque veremos cómo podemos hacer aserciones sobre el código HTML de la página, para verificar en este caso concreto que los formularios que se muestran están construidos adecuadamente.
Para finalizar el tema de pruebas de validación de la entrada de datos vamos a ver modos alternativos de realizar aserciones y cómo podemos usar Data providers de PHPUnit para probar distintos juegos de datos y distintas expectativas de respuestas.
Añadiendo cookies y variables de sesión a las solicitudes
Cómo probar solicitudes HTTP en las cuales se necesita la incorporación de cookies o variables de sesión para la funcionalidad que estamos testeando.
Cómo hacer que una solicitud creada en el código de pruebas tenga una cookie, de modo que se consiga un escenario de prueba adecuado cuando cierta funcionalidad requiere que exista una cookie en el navegador del usuario.Cómo usar el modelo de Fluent API para el test de los datos devueltos en JSON por las API REST.
Cómo conseguir que una solicitud generada en un método de prueba tenga consigo algunas variables de sesión asociadas, de modo que se simule el escenario que ciertas pruebas requieran.
Cómo manejar excepciones en las pruebas dentro de las aplicaciones Laravel
Cómo verificar que ciertas funcionalidades arrojan excepciones. Se verán tanto excepciones tratadas de manera genérica en el framework, como errores diversos del HTTP, como excepciones que se escalan específicamente en nuestro propio código.
En este vídeo se explican las generalidades más importantes para poder entender las excepciones en Laravel y cómo se deben tratar en los métodos de test. Veremos qué hace Laravel con las excepciones, ya que el framework las trata de manera predeterminada y cómo conseguir hacer las expectativas de excepciones en el código de pruebas desde distintos enfoques. Veremos de manera práctica además cómo detectar las excepciones con métodos de PHPUnit.
En este segundo bloque dedicado a excepciones en las pruebas de aplicaciones Laravel vamos a explicar cómo hacer un fake del sistema de reporte de excepciones que ya incorpora el framework y qué métodos de test tenemos a nuestra disposición cuando hemos configurado ese fake para comprobar si las excepciones han sido reportadas o no por Laravel.
Cómo aislar en el código de pruebas la ejecución del código que debería provocar excepciones, mediante una clousure y el método assertThrows.
Para acabar el bloque de excepciones en las pruebas de Laravel vamos a explicar varios casos prácticos de excepciones HTTP tradicionales, como páginas no encontradas o errores del servidor y cómo hacer código de testing que permiten detectar estas situaciones y probar que se están enviando las correspondientes páginas de error personalizadas.
Testing de bases de datos en Laravel
Cómo probar funcionalidades que necesitan de bases de datos para realizar su trabajo. Diversas configuraciones del entorno para bases de datos y explicaciones sobre los distintos modos de tratamiento de los datos efímeros. Pruebas de integración en Laravel.
En este vídeo comenzaremos a trabajar con las bases de datos en el desarrollo de las pruebas de aplicaciones Laravel. De momento vamos a aprender cuáles son las generalidades y alternativas para el trabajo con bases de datos en testing y cómo hacer las configuraciones oportunas en las variables de entorno.
En este segundo bloque vamos a realizar la creación de nuestros primeros tests para probar funcionalidades que dependen de las bases de datos. En este bloque además explicaremos los traits que tenemos en Laravel para el trabajo con bases de datos, en especial RefreshDatabase.
En este vídeo vamos a hacer un ejemplo más elaborado para mostrar cómo sería una prueba funcional que incluye diversos pasos, desde el envío de datos por post hasta la creación de datos y la verificación del estado final de la página. También hablaremos de los asserts específicos de bases de datos.
Uso de factorías y seeders en los test de bases de datos
Cómo mejorar las pruebas de integración de las aplicaciones laravel por medio del uso de factorías y seeders que nos ofrece el propio Laravel.
Veremos que las factorías, que hemos conocido en cursos más básicos de Laravel también nos resultan muy útiles para hacer métodos de test más concisos y mantenibles. Veremos varios ejemplos de uso de factorías para facilitar la creación de pruebas.
También tenemos la posibilidad de usar seeders de Laravel para mejorar el flujo de los métodos de test, algo que nos puede venir bien cuando requerimos la creación de numerosos datos complejos. Veremos distintas maneras de usar los seeds y consejos prácticos para hacer test eficientes.
Testing en Laravel que requiere el uso de usuarios autenticados
Cómo testear la existencia de usuarios autenticados o no autenticados en las rutas de las aplicaciones Laravel. Cómo autenticarse en los métodos de test para funcionalidades que requieran usuarios debidamente logueados.
Instalando el starter kit para el sistema de autenticación Comenzamos instalando en una aplicación Laravel el starter kit "Laravel Breeze", que nos permite disponer de un sistema de autenticación de usuarios ya construido. Prestamos atención a todos los test que ya vienen incorporados en Laravel Breeze.
Veremos paso por paso todos los test necesarios para probar el sistema de login, registro y logout de los usuarios en nuestra aplicación Laravel, aprendiendo muchas cosas nuevas sobre los tests que requieren verificar usuarios autenticados o no.
En los test incluidos con Laravel Breeze no hay un ejemplo con assertAuthenticatedAs, así que lo construimos para ampliar la red de seguridad de nuestras pruebas.
La sección de edición del perfil del usuario tiene unos test muy interesantes que requieren aprender nuevas funcionalidades de Laravel para mejorar la integración de los servicios del framework con las API REST. Veremos el uso de rutas patch y delete que se acceden directamente desde formularios HTML tradicionales y entenderemos mejor el sistema de verificación de usuarios de Laravel.
Además de analizar al detalle los test que nos ofrece Laravel Breeze para el sistema de autenticación vamos a hacer nuestras propias pruebas de funcionalidad que requieren la creación y definición de usuarios autenticados.
Adaptación de los test y el código de producción para asegurar que los usuarios solo ven los recursos que les pertenecen.
Testing de API en Laravel
Cómo realizar los test de aplicaciones backend basadas en API REST que devuelven datos en JSON.
Vamos a introducir las características del testing de APIs en Laravel. Veremos las diferencias con respecto al testing que hemos realizado hasta el momento. Para este bloque haremos tests de descubrimiento, partiendo de un proyecto de API REST realizada con anterioridad en Laravel. Mostraremos cómo restaurar el proyecto y hacer un primer test de JSON.
Este vídeo es un paréntesis en el curso para explicar cómo podemos cambiar el template del código base de los test de un API. Así introduciremos algunas diferencias en el código base como el uso de atributos para anotar los métodos de test.
En este vídeo vamos a mostrar cómo hacer los test para la funcionalidad de registro de usuario en un API REST, validando los JSON de las respuestas del API, validaciones, status codes, etc.
Veremos nuevas aserciones un poco más detalladas para testear los JSON de las respuestas del API.
En este vídeo veremos cómo realizar el testing de la funcionalidad de login de usuarios de nuestro API REST.
Cómo lidiar con tokens de API en las pruebas
Vídeos sobre el trabajo con autenticación en API REST basadas en tokens de API que se envía a través de las cabeceras de HTTP.
Ahora vamos a testear las rutas protegidas de este API. Vamos a ver todo el proceso que es necesario realizar, para obtener el token de autenticación para un usuario y luego añadir ese token en las cabeceras del HTTP, de modo que podamos testear las funcionalidades del API que requieren usuarios autorizados.
Este es un vídeo clave para la organización del código de test en las aplicaciones Laravel. Añadiremos nuevos métodos a la clase base de los test para autorizar de una manera super sencilla a nuestros usuarios, simplificando el código de tests de rutas autorizadas de aquí en adelante.
Presentación del curso de Testing con Laravel. Esta sesión está pensada para repasar los contenidos que son tratados durante el curso de Testing con Laravel y que ya están disponibles mediante vídeos a la carta.
Flujo completo de tests sobre recursos de API
Ahora que tenemos claro cómo autenticar a los usuarios y mantener un código sencillo podemos hacer prácticas de test de recursos de API de una manera ágil. Además veremos cómo aplicar más valor a las factorías de Laravel usando la característica Fluent API que nos proporcionan para crear datos de prueba de una manera sencilla y rápida.
En este vídeo comenzamos viendo las pruebas de los endpoints de tipo GET, tanto el GET del listado del recurso como el GET de un recurso en particular (show).
Vemos cómo probar el endpoint de POST de un elemento, con sus casos positivos y sus casos negativos (validaciones).
En este último vídeo del testeo de un recurso completo de API veremos cómo testear los PUT y los DELETE, verificando validaciones de permisos para asegurar que solo puede tocar sus propios elementos.
Personalizar factorías para los test
En estos vídeos vamos a hablar un poco más en profundidad de las factorías de Laravel y cómo les podemos sacar un poco más de partido para crear de manera resumida los datos para las pruebas.
En versiones modernas de Laravel se añadieron algunas funcionalidades un poco más avanzadas para la creación de los datos en las factorías, que las vamos a conocer y aplicar para los test de un nuevo endpoint del API.
Fluent JSON Testing
Cómo usar el modelo de Fluent API para el test de los datos devueltos en JSON por las API REST.
Veremos en qué consiste el API para el testing de los JSON de manera fluida, con los primeros ejemplos.
En estos ejemplos vamos a complicar un poco los test para validar estructuras anidadas de JSON con el API Fluent JSON.
En este último vídeo de Fluent JSON Testing vamos a ver qué podemos hacer para comprobar el tamaño y los elementos de las colecciones.
Tests de notificaciones en Laravel y envío de mailables
Cómo testear envíos de emails en Laravel y notificaciones.
Solo unas notas aparte para explicar rápidamente qué son los dobles en las pruebas del software y por qué los necesitamos, recordando que tenemos otros cursos de testing con contenido más teórico donde se ve con mucho más detalle este concepto.
Veamos cómo desarrollar una notificación y luego probarla. Para ello usaremos un fake creado con la facade Notification, que nos permite falsear el sistema de envío de notificaciones y además invocar aserciones para saber si se han enviado o no las notificaciones, con la forma que se esperaba.
El anterior ejemplo de prueba solamente había probado si la notificación se llegó a enviar y si estaba configurada correctamente, pero en este caso vamos a aprender a probar la notificación en sí.
En este video vamos a probar un controlador que usa una clase mailable para enviar un email a un usuario. Ese controlador creará un doble (fake) del mailable para falsear el envío y eso nos permitirá realizar aserciones para verificar si el mailable se llegó a enviar.
El ejemplo anterior nos permitió probar el envío, pero no el mailable en sí. Así que en esta ocasión vamos a verificar aspectos como el contenido del mensaje o el asunto del email generado por el mailable.
Tests de Jobs en Laravel
Cómo realizar las pruebas de los trabajos que enviamos a la cola de Laravel.
Crearemos un job en nuestra aplicación Laravel, que permita enviarlo a la cola de trabajos (queue). Este job hará la generación de un PDF usando el contenido de uno de los modelos de la aplicación. Solamente vamos a construir el job de generación del PDF, dejando las pruebas para el siguiente vídeo.
En este vídeo vamos a comprobar que los jobs se envían a la cola de trabajos de Laravel. Realizaremos un fake de la fachada Queue y luego podremos realizar las aserciones que nos permitan verificar que el job se ha enviado correctamente y que además se construyo de la manera esperada.
En los pasos anteriores hemos podido crear un doble del sistema de colas de Laravel y hemos podido comprobar que el job se crea correctamente y se envía a la cola. Pero esto no nos ha permitido testear el job en sí. En este vídeo vamos a ver cómo podríamos testear este trabajo, verificando que el archivo se crea en el sistema de archivos de la aplicación. Para eso tendremos que hacer un fake del Storage de Laravel, lo que nos permitirá realizar aserciones para saber si se ha creado convenientemente el archivo PDF al ejecutarse el job.
Mocks de otras fachadas
Cómo doblar cualquier tipo de facade disponible en Laravel, usando la librería Mockery, que está integrada en el framework. Veremos cómo probar distintos tipos de fachadas, ya sean del propio Laravel, de librerías que podamos haber instalado vía Composer o facades creados por nosotros mismos.
En este bloque vamos a explicar cómo podemos hacer las pruebas de fachadas en Laravel y comenzaremos con un ejemplo sencillo, tomando una facade que nos ofrece el propio framework para definir los expectations vía el API de Mockery.
En este vídeo veremos que cualquier package Laravel de terceros, que hayamos instalado vía composer también se puede doblar mediante mockery, creando dobles que nos permiten definir expectations y valores de retorno.
Para terminar el bloque de pruebas personalizadas sobre cualquier tipo de fachada en Laravel vamos a explicar qué son las "real time facades", que nos permiten crear de manera cómoda nuestras propias fachadas. Veremos que los mismos métodos de prueba que ofrece Mockery los podemos usar para las fachadas creadas por nosotros mismos.
Mocks personales
Cómo moquear nuestras propias clases de software y cambiar la inyección de las dependencias del contenedor de servicios de Laravel.
Ahora vamos a ver cómo crear mocks para cualquier objeto que necesitemos doblar, usando la interfaz que nos ofrece la librería Mockery que está integrada en Laravel. Veremos cómo el propio sistema de inyección de dependencias de Laravel puede inyectar los dobles de manera automática.
En este vídeo vamos a mostrar otros usos de los dobles creados mediante Mockery. Veremos cómo y por qué realizar mocks parciales y la implementación de spy en dobles, con sus diferencias en el uso y posiblidades con respecto a los mocks tradicionales que hemos visto hasta el momento.
Introducción al Browser testing en Laravel
Cómo comenzar con las pruebas del navegador, lo que en Laravel conocemos como Browser testing, mediante Laravel Dusk.
Cómo instalar Laravel Dusk para las pruebas end to end en una aplicación Laravel, usando como host el ordenador local. Configuración de variables de entorno. Correr los test del navegador.
Entendiendo cómo se hacen test del navegador mediante Laravel Dusk. Creamos un primer test sencillo interactuando con el navegador y haciendo asserts acerca de su estado.
Unas notas adicionales sobre la configuración de Laravel Sail para disponer de Selenium, a fin de poder ejecutar los test del navegador en contenedores.
En este vídeo vamos a ver cómo funciona la utilidad de los screenshots en Laravel Dusk, que nos permiten capturar el estado del navegador cuando fallan los test y cuando queremos ver el estado de la página en un momento dado, para no ir completamente a ciegas. Veremos qué problemas puedes enfrentarte cuando trabajas con test del navegador y la carga de assets como el CSS.
En este vídeo veremos algunas notas finales sobre los test del navegador, cuándo realizarlos y por qué deberían balancearse con los test de features. Además haremos un pequeño epílogo a modo de conclusión del curso.
Esta es la tutoría final del curso de Pruebas del Software con Laravel. En esta clase además aprovecharemos para ver nuevos ejemplos de Browser testing, complementando el contenido que hemos visto a lo largo del curso, para testear la parte de envío de mensajes de la aplicación que hicimos en la clase en vivo de presentación.
Valoraciones
Edson Suarez
Llevo menos de la mitad pero ya puedo decir que es un curso excelente.
José Rubén Mariño García
¿Conoces nuestra tarifa plana?
Toda la formación de EscuelaIT, con más de 200 cursos completos para aprender las más variadas tecnologías de programación, diseño y marketing online. Todo! con tu suscripción.