Cuando desarrollamos aplicaciones a nivel profesional, emular el comportamiento de un usuario en el sistema no es suficiente para comprobar el correcto funcionamiento de nuestro código, sino que es necesario aplicar ciertas medidas que puedan darnos certeza de que todo dentro de nuestra plataforma funciona como se espera, para ello existen las pruebas de integración.
Laravel 5.1 es un framework desarrollado pensando en el uso profesional, por ello esta funcionalidad no podía quedar de lado y de hecho Laravel ahora no sólo incluye soporte para PHPUnit en cada instalación, sino que también tiene su propio componente con el que podemos crear nuestras pruebas de integración.
¿Qué es PHPUnit?
PHPUnit, es un framework de PHP diseñado para probar código PHP, de tal manera que podamos escribir funciones que prueben nuestro sistema y posteriormente ejecutarlas con un simple comando desde la consola para garantizar que nuestro sistema se comporta como debería, u obtener errores correspondientes a cada falla que debamos corregir.
Instalar PHPUnit de manera global
Como mencionaba anteriormente PHPUnit está disponible dentro de cada instalación de Laravel, pero si deseas instalarlo de forma global, puedes seguir las siguientes líneas:
Descargamos el componente
wget https://phar.phpunit.de/phpunit.phar
Modificamos los permisos del archivo
chmod +x phpunit.phar
Cambiamos la ubicación para que pueda ser usado de forma global
sudo mv phpunit.phar /usr/local/bin/phpunit
Verificamos la instalación
phpunit --version
¿Qué son las pruebas de integración?
Hablar sobre pruebas suele ser confuso, puesto que existen muchos tipos de pruebas, cada una tiene diferentes terminologías y muchas veces ni siquiera los autores de frameworks de pruebas se ponen de acuerdo, por ejemplo en Codeception las pruebas de integración se llaman «pruebas funcionales» pero es el mismo concepto.
PHPUnit fue diseñado para construir «pruebas unitarias» sin embargo también se puede usar para escribir pruebas de integración gracias al nuevo componente de Laravel 5.1 o a otros frameworks como Codeception.
Ok, y después de todo ¿Qué son las pruebas de integración?
Mientras que una prueba unitaria se encarga de probar una «unidad» (una función, clase o método), una prueba de integración se encarga de probar la interacción del usuario en una página. Por ejemplo:
- El usuario visita la página de registro
- El usuario escribe «Jeff» en el campo «nombre»
- El usuario presiona «regístrame
- El usuario ve el error: «debes completar el campo email»
Pruebas en Laravel 5.1
Dentro de cada proyecto de Laravel existe una carpeta llamada tests/ que es el lugar donde podemos escribir nuestras pruebas.
Todas las funciones que creemos en este directorio deben extender de la clase TestCase, y los métodos de prueba deben tener el prefijo «test», así que si por ejemplo escribimos una clase para probar las funciones de autenticacion, tendríamos la siguiente estructura
<?php class AuthTest extends TestCase public function testLoginPage(){ } }
Gracias a los helpers de Laravel podemos escribir pruebas de una forma muy intuitiva. Por ejemplo si creamos una pagina de home con el mensaje de bienvenida «Styde is awesome», en lugar entrar al navegador y verificar, podemos escribir una prueba rápida y comprobar desde la consola de comandos.
Vamos a editar un poco nuestro archivo routes.php para ver esto en marcha:
Route::get('home', function() { return view('home'); });
Ahora creamos nuestra vista home.blade.php:
<html> <body> <h1>Styde is awesome</h1> </body> </html>
Ahora viene lo difícil… Bueno, sería difícil si no estuviéramos trabajando con Laravel, en realidad, sólo debemos escribir algo como «Hey, si ingreso a la página «home» debería ver «Styde is awesome». ¿Será tan fácil? Veamos:
En este caso vamos a editar el archivo ExampleTest.php dentro del directorio test de nuestra aplicación:
<?php class ExampleTest extends TestCase { /** * A basic functional test example. * * @return void */ public function testBasicExample() { $this->visit('home') ->see('Styde is awesome'); } }
¡Listo! Esto debería ser suficiente.
Ejecutando pruebas de integración en Laravel 5.1
Las pruebas de integración se ejecutan desde la consola de comandos usando PHPUnit dentro del directorio raíz del proyecto, si no has instalado PHPUnit de forma global puedes usar el siguiente comando para ejecutarlo desde el directorio vendor de la aplicación
$ vendor/bin/phpunit
Si seguiste la instalación en los pasos anteriores simplemente bastará con
$ phpunit
Si todo sale bien, deberías ver algo similar a esto:
PHPUnit 4.7.5 by Sebastian Bergmann and contributors. . Time: 7.66 seconds, Memory: 8.00Mb OK (1 test, 2 assertions)
Conclusión
Esto es apenas una simple muestra de todo lo que puedes hacer, interactuar con botones, links, evaluar tipos de resultados como json, todo esto y mucho más es posible y gracias a este nuevo componente de Laravel 5.1.
Si quieres aprender a escribir pruebas de tus aplicaciones y subir tu nivel como programador, te invitamos a iniciar el Curso de Laravel 5.1 con material exclusivo donde Duilio ha dedicado una sección entera a explicar cómo usar las pruebas de integración, incluyendo uso de base de datos, creación de features y mucho más, para darte una idea puedes comenzar con el siguiente Video Tutorial sobre Pruebas de integración en Laravel 5.1 o inscribirte a Styde para poder obtener acceso al curso completo desde hoy mismo:
Regístrate en Styde
Para obtener acceso a ésta y a todas nuestras lecciones y cursos premium:
Recuerda que puedes dejar tus dudas en la sección de comentarios y no olvides compartir el contenido en las redes sociales de tu preferencia.
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección anterior Configuración de Git en proyectos de Laravel Lección siguiente Uso de Pivot tables con Eloquent en Laravel