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..
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.
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..
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 migraAdemá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 elEnviar
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 lapruebas / unidad
directorio.$ php artisan make: prueba AccessorTest --unitY 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 lagetNameAttribute
método de laEnviar
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 elgetNameAttribute
Método también para preparar el título del post. Finalmente, utilizamos elassertEquals
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 laPruebas / Característica
directorio.$ php artisan make: prueba AccessorTestCreará 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 deassertSeeText
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.
$ phpunitEso 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!