Pruebas en Laravel

Independientemente de la aplicación con la que esté lidiando, las pruebas son un aspecto importante y que a menudo se pasa por alto y debe prestarle la atención que merece. Hoy lo vamos a discutir en el contexto del framework web Laravel..

De hecho, Laravel ya es compatible con el marco de prueba PHPUnit en el núcleo mismo. PHPUnit es uno de los marcos de prueba más populares y ampliamente aceptados en toda la comunidad de PHP. Te permite crear ambos tipos de pruebas-unidad y funcional.

Comenzaremos con una introducción básica a las pruebas unitarias y funcionales. A medida que avancemos, exploraremos cómo crear pruebas unitarias y funcionales en Laravel. Supongo que está familiarizado con los conceptos básicos del marco PHPUnit, ya que lo exploraremos en el contexto de Laravel en este artículo..

Pruebas unitarias y funcionales

Si ya está familiarizado con el marco PHPUnit, debe saber que puede dividir las pruebas en dos unidades de sabores: pruebas funcionales y funcionales..

En las pruebas unitarias, se prueba la corrección de una función o un método dado. Más importante aún, usted prueba una sola pieza de la lógica de su código en un momento dado.

En su desarrollo, si encuentra que el método que ha implementado contiene más de una unidad lógica, es mejor dividirlo en múltiples métodos para que cada método contenga una sola pieza de código lógica y comprobable..

Echemos un vistazo rápido a un ejemplo que es un caso ideal para pruebas de unidad.

función pública getNameAttribute ($ value) return ucfirst ($ value); 

Como puedes ver, el método hace una y solo una cosa. Utiliza el ucfirst Función para convertir un título en un título que comienza con mayúsculas.

Mientras que la prueba de la unidad se usa para probar la corrección de una única unidad lógica de código, la prueba funcional, por otro lado, le permite probar la corrección de un caso de uso específico. Más específicamente, le permite simular acciones que un usuario realiza en una aplicación para ejecutar un caso de uso específico.

Por ejemplo, podría implementar un caso de prueba funcional para algunas funciones de inicio de sesión que pueden incluir los siguientes pasos.

  • Crea la solicitud GET para acceder a la página de inicio de sesión..
  • Compruebe si estamos en la página de inicio de sesión.
  • Generar la solicitud POST para publicar datos en la página de inicio de sesión.
  • Compruebe si la sesión se creó correctamente.

Así es como se supone que debes crear el caso de prueba funcional. A partir de la siguiente sección, crearemos ejemplos que demuestran cómo crear casos de prueba funcionales y de unidad en Laravel..

Configuración de los requisitos previos

Antes de seguir adelante y crear pruebas reales, debemos configurar un par de cosas que se utilizarán en nuestras pruebas.

Para empezar, crearemos el modelo de publicación y la migración relacionada. Continúa y ejecuta el siguiente comando artesanal para crear el Enviar modelo.

$ php artesanal hace: modelo Post - migración

El comando anterior debe crear el Enviar clase de modelo y una migración de base de datos asociada, así.

los Enviar La clase modelo debe verse como:

Y el archivo de migración de base de datos debe ser creado en base de datos / migraciones / YYYY_MM_DD_HHMMSS_create_posts_table.php.

También queremos almacenar el título del post. Revisemos el código de la Enviar archivo de migración de base de datos para parecerse a la siguiente.

incrementos ('id'); $ table-> string ('nombre'); $ table-> timestamps (); );  / ** * Revertir las migraciones. * * @return void * / public function down () Schema :: dropIfExists ('posts'); 

Como puedes ver, hemos añadido el $ tabla-> cadena ('nombre') Columna para almacenar el título del post. A continuación, solo necesita ejecutar el comando migrar para crear esa tabla en la base de datos.

$ php artesano migra

Además, vamos a reemplazar el Enviar Modelo con los siguientes contenidos..

Acabamos de añadir el accesor Método, que modifica el título de la publicación, y eso es exactamente lo que probaremos en nuestro caso de prueba de unidad. Eso es todo lo que el Enviar modelo se refiere.

A continuación, crearemos un archivo de controlador en app / Http / Controllers / AccessorController.php. Será útil para nosotros cuando creemos el caso de prueba funcional en una etapa posterior..

get ("id", 0); // carga la publicación solicitada $ post = Post :: find ($ post_id); // verifica la propiedad name devuelve $ post-> name; 

En el índice Método, recuperamos el ID de publicación de los parámetros de solicitud e intentamos cargar el objeto de modelo posterior.

Añadamos una ruta asociada también en el rutas / web.php expediente.

Route :: get ('accessor / index', 'AccessorController @ index');

Y con eso en su lugar, puede ejecutar la URL http://your-laravel-site.com/accessor/index para ver si funciona como se espera.

Examen de la unidad

En la sección anterior, hicimos la configuración inicial que nos será útil en esta y en las próximas secciones. En esta sección, vamos a crear un ejemplo que demuestra los conceptos de pruebas de unidad en Laravel..

Como siempre, Laravel proporciona un comando artesanal que le permite crear la clase de plantilla base del caso de prueba de unidad.

Ejecute el siguiente comando para crear el Prueba de accesorios prueba de unidad de clase de caso. Es importante tener en cuenta que estamos pasando el --unidad palabra clave que crea el caso de prueba de unidad, y se colocará bajo la pruebas / unidad directorio.

$ php artisan make: prueba AccessorTest --unit

Y eso debería crear la siguiente clase en pruebas / Unit / AccessorTest.php.

assertTrue (verdadero); 

Vamos a reemplazarlo con algún código significativo.

nombre); // cargar publicación usando Eloquent $ model_post = Post :: find (1); $ model_post_title = $ model_post-> name; $ this-> assertEquals ($ db_post_title, $ model_post_title); 

Como puede ver, el código es exactamente el mismo que habría sido en el núcleo de PHP. Acabamos de importar dependencias específicas de Laravel que nos permiten utilizar las API necesarias. En el testAccessorTest método, se supone que debemos probar la exactitud de la getNameAttribute método de la Enviar modelo.

Para hacerlo, hemos obtenido un ejemplo de publicación de la base de datos y hemos preparado el resultado esperado en el $ db_post_title variable. A continuación, cargamos la misma publicación utilizando el modelo Eloquent que ejecuta el getNameAttribute Método también para preparar el título del post. Finalmente, utilizamos el assertEquals Método para comparar ambas variables como de costumbre..

Así es como se preparan los casos de prueba unitaria en Laravel..

Pruebas funcionales

En esta sección, crearemos el caso de prueba funcional que prueba la funcionalidad del controlador que creamos anteriormente.

Ejecute el siguiente comando para crear el Prueba de accesorios clase de caso de prueba funcional. Como no estamos usando el --unidad palabra clave, se tratará como un caso de prueba funcional y se colocará bajo la Pruebas / Característica directorio.

$ php artisan make: prueba AccessorTest

Creará la siguiente clase en tests / Feature / AccessorTest.php.

assertTrue (verdadero); 

Vamos a reemplazarlo con el siguiente código.

nombre); $ response = $ this-> get ('/ accessor / index? id = 1'); $ respuesta-> assertStatus (200); $ respuesta-> assertSeeText ($ db_post_title); 

Nuevamente, el código debe ser familiar para aquellos que tienen experiencia previa en pruebas funcionales.

En primer lugar, estamos obteniendo una publicación de ejemplo de la base de datos y preparando el resultado esperado en el $ db_post_title variable. A continuación, intentamos simular el / accessor / index? id = 1 OBTENER solicitud y obtener la respuesta de esa solicitud en el $ respuesta variable.

A continuación, hemos tratado de hacer coincidir el código de respuesta en el $ respuesta Variable con el código de respuesta esperado. En nuestro caso, deberían ser 200, ya que deberíamos obtener una respuesta válida para nuestra solicitud GET. Además, la respuesta debe contener un título que comience con mayúsculas, y eso es exactamente lo que estamos tratando de hacer coincidir con el uso de assertSeeText método.

Y ese es un ejemplo del caso de prueba funcional. Ahora, tenemos todo contra lo que podríamos ejecutar nuestras pruebas. Continuemos y ejecutemos el siguiente comando en la raíz de su aplicación para ejecutar todas las pruebas.

$ phpunit

Eso debería ejecutar todas las pruebas en su aplicación. Debería ver una salida estándar de PHPUnit que muestra el estado de las pruebas y aserciones en su aplicación.

Y con eso, estamos al final de este artículo..

Conclusión

Hoy, exploramos los detalles de las pruebas en Laravel, que ya son compatibles con PHPUnit en su núcleo. El artículo comenzó con una introducción básica a las pruebas unitarias y funcionales y, a medida que avanzamos, exploramos los aspectos específicos de las pruebas en el contexto de Laravel..

En el proceso, creamos un puñado de ejemplos que demostraron cómo se podrían crear casos de prueba funcionales y de unidad con el comando artesanal..

Si recién está comenzando con Laravel o busca expandir su conocimiento, sitio o aplicación con extensiones, tenemos una variedad de cosas que puede estudiar en Envato Market..

No dudes en expresar tus pensamientos utilizando el siguiente feed!