Post Top Ad

Your Ad Spot

martes, 8 de septiembre de 2020

Introducción a las pruebas en Laravel

 probando-con-laravel

Las pruebas no son algo a lo que personalmente haya dedicado mucho tiempo. Si el código que estaba escribiendo hizo lo que quería que hiciera, eso fue lo suficientemente bueno para mí. Si las pruebas formales no forman parte de su experiencia, los beneficios de las pruebas no son tan obvios. De hecho, siendo nuevo en probarme a mí mismo, algunos de los beneficios no son obvios para mí. Sobre todo, me gustaría sumergirme en las pruebas con Laravel porque es un nuevo desafío y algo divertido para jugar y aprender. A medida que avanzamos, veamos si podemos descubrir algunos de los beneficios y ventajas del desarrollo impulsado por pruebas. Al final de este tutorial, intentaremos responder a la pregunta: ¿Por qué debería escribir pruebas?


Introducción a las pruebas en Laravel

Cuando empiezo algo nuevo, me gusta ir tan básico como sea humanamente posible. De forma predeterminada, nos enteramos de que Laravel ha incorporado soporte para PHPUnit, uno de los marcos de prueba más comunes para PHP. También se configura un archivo xml para pruebas. Para los propósitos de este tutorial, se encuentra en una carpeta llamada lpgEsta carpeta es la abreviatura de Laravel Play Ground , y reside en Laravel Homestead. Veamos este archivo.

Hasta ahora, este archivo no significa mucho para nosotros, pero veremos si podemos aprender sobre él a medida que avancemos. Sin embargo, podemos hacer algunas suposiciones generalizadas, como que hay un /testsdirectorio y un /appdirectorio a tener en cuenta, así como un archivo de carga automática para el bootstrap. Lleguemos a esa primera prueba mágica escribiendo phpuniten la línea de comando así.

tu-primera-prueba-laravel

¡Vaya, esto se ve muy bien! Veamos qué hicimos aquí. Primero tuvimos que entrar en la caja de homestead , ya que necesitamos ejecutar pruebas en la máquina virtual, no en la computadora host. Luego, cambiamos al directorio que contiene nuestra aplicación. En nuestro caso teníamos que hacerlo cd Code, entonces cd lpg¡Finalmente, estamos listos para ejecutar nuestra primera prueba! En la línea de comando desde la raíz de nuestro proyecto ejecutamos phpunitLa salida como podemos ver está bien con un fondo verde. También podemos ver que hubo 1 prueba y 2 afirmaciones. Entonces, ¿qué significa esto realmente?

Resulta que hay uno ExampleTest.phpque ya vive en el directorio de pruebas de nuestro proyecto. Este es el archivo que se ejecutó cuando escribimos phpuniten la línea de comandos. Entonces, ¿qué contiene este archivo? Echemos un vistazo.

¡Muy genial! Con solo mirar el código podemos inferir que visitando la raíz de nuestro proyecto, veremos el texto de Laravel. Si visitamos manualmente la página en nuestro navegador, esto es de hecho lo que vemos.
visitando-la-raíz-de-nuestra-aplicación-laravel

Micro Resumen: este primer ejemplo fue simplemente inspeccionar la prueba predeterminada que viene con Laravel. En él vemos cómo hacer uso de los métodos visit () y see () . También ejecutamos el comando phpunit en la línea de comandos para probar las cosas.


Entonces, ¿qué es una prueba?

La mayoría de las pruebas hacen 3 cosas simples

  • 1. Organice o inicialice algunos datos.
  • 2. Ejecute una función para actuar sobre estos datos.
  • 3. Verifique o afirme que la salida coincide con lo que esperábamos.

Intentemos crear una función y probarla. Simplemente agregaremos una función pública al Home Controller en Laravel.

Antes incluso de intentar utilizar esta función, crearemos una prueba para ella. Podemos usar el artesano para hacer esto por nosotros. Crearemos una clase de prueba para probar la clase HomeController. Lo hacemos escribiendo php artisan make:test HomeControllerTestEsto crea una nueva clase de prueba para nosotros, y se ve así.

Así que ahora tenemos dos archivos para probar en nuestro directorio de pruebas, tanto el ExampleTest.phpcomo el HomeControllerTest.phpNecesitaremos actualizar nuestra nueva clase de prueba para probar la función en nuestro controlador. Actualicemos el HomeControllerTest.phparchivo para probar nuestra addfunción en el HomeController.

Lo que estamos haciendo aquí es crear la prueba. Lo nombramos test_add()ya que eso es lo que estamos tratando de confirmar. En primer lugar, configuramos algunos datos. Este es el primer número y el segundo número que agregar. Luego, hacemos una llamada a nuestra función, pasando dos argumentos numéricos. Sabemos que 1 + 1debería ser así 2Ahora digamos a nuestro caso de prueba que esto es lo que se supone que debe suceder. Observe que hacemos uso del método PHP Unit assertEquals () . Esta función simplemente verifica o afirma si el argumento 1 y el argumento 2 son iguales. Entonces, como sabemos que 1 + 1debería ser igual 2, asignamos esto como el primer parámetro para assertEquals () . Pasamos el $sumque nuestra add()función devuelve como argumento 2. Probémoslo ejecutándolo phpunit.

prueba-agregar-pasar
¡Frio! Nuestra prueba está pasando. Hagamos un cambio y veamos qué pasa.

Ahora observe que pasamos 23como argumentos a nuestra add()función. En nuestra assertEquals()función, nos vamos 2como primer argumento. Lo que esto está diciendo es que 2 + 5debería ser igual 2, y sabemos que no es cierto, por lo que nuestra prueba debería fallar. Veamos si lo hace.
prueba-agregar-fallar
Así es como se ve una prueba unitaria de PHP fallida. En nuestro caso, nos dice exactamente qué salió mal. No se pudo afirmar que se esperaban 5 coincidencias 2 . Hagamos que nuestra prueba vuelva a pasar. Simplemente cambiaremos nuestro resultado esperado de 2 a 5 como tal.

prueba-añadir-pasar-de nuevo

Parece que hemos vuelto a pasar, lo cual es genial.


Pruebas de aplicaciones en Laravel

En este punto, sabemos un poco sobre pruebas con PHP Unit y Laravel. Abordemos ahora una introducción a las pruebas a nivel de aplicación en Laravel. De hecho, ya lo tocamos un poco. Cuando ejecutamos el ExampleTest que viene con Laravel, probamos la capacidad de visitar una ruta y mostrar algo de texto. Lo interesante es que este tipo de prueba es un tipo de prueba de nivel superior alejado, por así decirlo. Laravel proporciona estos métodos agradables que podemos usar y que resumen afirmaciones más complejas en la Unidad PHP. Por lo tanto, podemos hacer algunas pruebas bastante buenas con una sintaxis mínima. Ahora, personalicemos este ejemplo básico para empezar a acostumbrarnos a escribir pruebas básicas. Adoptaremos el enfoque de escribir nuestras pruebas primero, ejecutarlas para presenciar las fallas, luego arreglaremos las cosas una a la vez para que pasen.

1. Escribe el código sudo

  • 1. Visite / pageone
  • 2. Haga clic en el enlace "Página dos".
  • 3. Vea la página dos
  • 4. Confirme que la URL actual es / pagetwo

2. Escribe la prueba

En este punto, ejecutar phpunit produce una falla total.
404-prueba-falla
3.Hazlos pasar

Con nuestra prueba en su lugar, comenzamos corriendo phpunitEncontramos el siguiente error.

Hubo 1 falla:

1) ExampleTest :: testBasicExample Error en
una solicitud a [http: // localhost / pageone]. Código de estado recibido [404].

Tenemos un error 404, ¿cómo lo solucionamos? Bueno, necesitamos una ruta a la página uno, así que configurémosla.

Ejecutemos phpunit nuevamente. Ahora obtenemos este error.

Hubo 1 falla:

1) ExampleTest :: testBasicExample Error en
una solicitud a [http: // localhost / pageone]. Código de estado recibido [500].

Hmmm ... Normalmente, un código de error 500 es una falla del servidor. Bueno, sabemos que necesitamos una vista para la página uno, así que creemos una e incluyamos un enlace en ella.

pageone.blade.php

Ejecutar phpunit nuevamente ahora nos da este error.

Hubo 1 falla:

1) ExampleTest :: testBasicExample
Una solicitud a [http: // localhost / pagetwo] falló. Código de estado recibido [404].

Esto tiene sentido, ya que no tenemos una ruta para la página dos, creémosla.

Ejecutando phpunit nuevamente, obtenemos otro error. Parece que volvimos a volar el servidor.

Hubo 1 falla:

1) ExampleTest :: testBasicExample
Una solicitud a [http: // localhost / pagetwo] falló. Código de estado recibido [500].

Ah, claro, necesitamos agregar una vista para la página dos. Cree pagetwo.blade.phpy ejecute phpunit nuevamente.

Hubo 1 error:

1) ExampleTest :: testBasicExample
InvalidArgumentException: La lista de nodos actual está vacía.

Mmmm, tal vez esto se deba a que aún no agregamos el texto en la página dos. Agregue el texto, "Esta es la página dos" a esta vista, luego ejecute phpunit nuevamente.

vagrant @ homestead: ~ / Code / lpg $ phpunit
PHPUnit 5.5.2 por Sebastian Bergmann y colaboradores.

1/1 (100%)

Tiempo: 319 ms, memoria: 10,00 MB

OK (1 prueba, 5 afirmaciones)
vagrant @ homestead: ~ / Code / lpg $

¡Agradable! ¡Ahora está funcionando completamente!

Aunque nuestra prueba solo usó cuatro métodos, hay muchos caballos de fuerza allí. Observar el código fuente que lo hace posible nos muestra cómo funciona.

visitar()

hacer clic()

ver()

seePageIs ()



Introducción a las pruebas en Laravel Resumen

Esta fue una introducción realmente básica para comenzar con las pruebas en Laravel. ¿Qué aprendimos y cuál es el beneficio de las pruebas? Bueno, es tan fácil no probarlo. Nos dedicamos a piratear un proyecto muy rápidamente y probamos manualmente cada cosa a medida que avanzamos. Agregamos una función y luego la ejecutamos en el navegador. ¿Funcionó? ¿No? Ok, arregle todas las cosas, luego verifique el resultado en el navegador nuevamente. ¿Funcionó? ¿Si? Genial, pasa a lo siguiente. Esto funciona, pero el problema es lo que vendrá en el futuro. ¿Qué sucede si desea o necesita refactorizar funciones en su proyecto? Es probable que tema esto como la plaga si no tiene pruebas que le den confianza en que las cosas seguirán funcionando. Y este es el beneficio clave número uno de las pruebas: confianzaConfianza en el hecho de que en cualquier momento puede ejecutar todas las pruebas que ha construido a lo largo del tiempo en un proyecto en particular y ver que todo funciona como debería. Piense en cuántas veces probó manualmente cada cosa en el último proyecto que creó. Si quisiera refactorizar algo ahora, en el futuro, ahora le preocupa si algo se romperá. En teoría, tendría que probar manualmente cada escenario en el navegador, para todas las funciones de la aplicación. Eso no solo llevaría mucho tiempo y sería doloroso, sino que ni siquiera sería posible recordar con precisión cómo verificó cómo funcionaron las cosas en primer lugar. Este es el beneficio de las pruebas. Los crea sobre la marcha, y luego, en el futuro, puede recurrir a ellos para su propia cordura y confianza en su código. Creo que esto realmente da en el blanco a la pregunta de "¿Por qué debería escribir exámenes?" en mi aplicación. Confianza e Inversión en el futuro de su aplicación.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas