Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Testing
Code

Programando con Yii2: Comprobación Automática Con Codeception

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called How to Program With Yii2.
Programming With Yii2: Security
How to Program With Yii2: ActiveRecord

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

Final product image
What You'll Be Creating

Si te estás preguntando, "¿Qué es Yii?" revisa mi tutorial anterior Introducción al Framework Yii, el cuál revisa los beneficios de Yii e incluye un vistazo a las novedades en Yii 2.0, liberado en Octubre de 2014.

En esta serie Programando Con Yii2, estoy guiando a los lectores en el uso del Framework Yii2 para PHP. En este tutorial, exploraré la comprobación automática usando Codeception, el cuál está integrado en el framework de desarrollo Yii2.

Es cierto qué, mi experiencia escribiendo pruebas con mi código es escasa. Frecuentemente he sido parte de proyectos en solitario o pequeños con recursos limitados. Durante mi tiempo en Microsoft, tuvimos distintos equipos de comprobación que hacían esto. Pero francamente, es probablemente típico de tí también, ¿verdad? A los programadores les gusta codificar, ellos no escriben pruebas--al menos los programadores de la vieja escuela no lo hacían.

Codeception es una innovadora librería que literalmente apunta escribir pruebas de manera divertida y sencilla. Y, yo diría que han tenido éxito en un grado razonable. A medida que he sumergido mi dedo del pie en las aguas del "Lago Codeception", ha sido en su mayoría fácil y divertido. Sin embargo, mientras comienzo a adentrarme más, me encontré con problemas de configuración con Yii y los módulos específicos usados en esta serie. Definitivamente hubo retos. En general, sin embargo, estoy impresionado y veo el beneficio de aprender más.

Puesto en términos simples, Codeception y su integración con Yii me hace querer escribir más pruebas, algo fundamental para mí. Sospecho que tendrás una experiencia similar.

Un pequeño recordatorio antes de que comencemos, participo en los comentarios de abajo. Estoy especialmente interesado si tienes ideas adicionales o quieres sugerir temas para futuros tutoriales. Si tienes una pregunta o sugerencia de tema, por favor publícalo abajo. También puedes contactarme en Twitter @reifman directamente.

Comenzando

Instalando Codeception

Para guiarme, usé la documentación de Configuración de Ambiente de Pruebas de Yii. Comencé con una instalación global de codeception de manera que pudiera usarlo desde cualquier proyecto.

También necesitas requerir codeception/specify:

Y codeception/verify:

Después, es de ayuda establecer un alias para codecept usando tu directorio global de composer:

Esto establece el alias:

Yii también requiere que instales Faker, el cuál genera información falsa de pruebas para tu aplicación:

Configurando Codeception Con Tu Aplicación

Codecept bootstrap inicializa codeception para tu aplicación Yii, creando una variedad de archivos de configuración para construír y ejecutar pruebas contra tu aplicación. Estamos usando la aplicación Hello de esta serie para este tutorial. Mira el enlace de GitHub en esta página para obtener el código.

Por alguna razón, también terminé con directorios de prueba duplicados en hello/tests; solo borrar hello/tests/functional, hello/tests/acceptance, y hello/tests/unit aclaró las cosas. Todas las pruebas viven en hello/tests/codeception/*.

Los Diferentes Tipos de Pruebas

Codeception está enfocado en tres tipos de pruebas:

  1. Unit testing verifica que las unidades específicas están funcionando, tal como una exhausitva prueba de todos tus métodos de modelo.
  2. Functional tetsing verifica escenarios comunes de aplicación como si un usuario real los estuviera actuando, pero usando emulación de navegador web.
  3. Acceptance testing es identico a functional testing pero de hecho ejecuta pruebas a través del navegador.

Y este soporta tres tipos diferentes de formatos de pruebas para tu código de prueba:

  1. Cept: es el archivo de prueba de escenario más simple
  2. Cest: un formato orientado a objetos para ejecutar múltiples pruebas dentro de un solo archivo
  3. Test: pruebas escritas en PHPUnit, un framework de pruebas PHP

Comencemos con un ejemplo de acceptance tests usando el formato cept:

Prueba de Aceptación

Usaremos la prueba de ejemplo Welcome de Codeception primero.

Este genera tests/acceptance/WelcomeCept.php, el cuál editaremos abajo.

Ya que las pruebas de aceptación requieren del navegador, tenemos que editar /tests/acceptance.suite.yml en nuestro proyecto para proporcionar nuestra URL de desarrollo, http://localhost:8888/hello:

Ahora, estamos listos para modificar la prueba inicial en tests/acceptance/WelcomeCept.php. Estoy escribiendo una prueba que carga la página frontal para asegurarme de que funciona como es esperado.

Las pruebas de Codeception tienen el concepto de un actor, en este caso, $I = new AcceptanceTester().

Aquí está cómo este describe actores en la documentación de Codeception:

Tenemos un UnitTester, quien ejecuta funciones y prueba el código. También tenemos un FunctionalTester, un probador calificado, quien prueba la aplicación como un todo, con conocimiento de sus internos. Un AcceptanceTester, un usuario que trabaja con nuestra aplicación a través de la interfaz que proporcionamos.

Puedes comentar tus pruebas con código, tal como $I->wantTo('perform a certain test') ó 'ensure that the frontpage works'.

En mi prueba, quiero ver el texto $I->see para 'Congratulations!' y 'Yii-powered':

Aquí está la página de inicio actual Hello:

Programming with Yii - The Hello Home Page

A continuación, ejecutemos la prueba, simplemente codecept run:

Como puedes ver, nuestra prueba pasó y el código para verificar esta funcionalidad fue bastante legible y simple.

Notas en las Pruebas Por Defecto de Yii

Para ir más allá, comencé usando las pruebas por defecto de Yii. En este punto, me econtré con una cantidad de problemas de configuración--la mayoría debidos a mi uso del módulo personalizado yii2-user en esta serie. Otros se debieron a pequeños bugs con yii, los cuáles su equipo ha sido rápido en responder y corregir cuando fueron reportados en GitHub; en algunos casos, los problemas fueron corregidos en liberaciones posteriores de árbol yii2-basic

Tambiém, debido a que actualicé el árbol yii2-basic para esta serie, tuve que hacer algunos cambios pequeños a algunos de las pruebas por defecto.

Aquí hay un ejemplo de la salida al ejecutar las pruebas de aceptación por defecto una vez que hice algunos ajustes menores.

Pruebas Funcionales

Para hacer funcionar las pruebas funcionales, necesité ejecutar una instancia del servidor integrado de Yii. No sabía acerca de este componente hasta que Alex Markov de Yii lo mencionó en nuestro intercambio de GitHub.

Hice unos pequeños cambios a las pruebas funcionales en /tests/codeception/functional, en su mayoría para buscar mis cadenas de texto actualizadas específicas, ej. "Login o contraseña inválidos" en lugar del valor por defecto de Yii. Aquí hay un vistazo a LoginCept.php:

Básicamente, el código accesa al modelo LoginForm y prueba sus distintos métodos usando Yii serve.

Aquí está el código de prueba de /tests/codeception_pages/LoginPage.php que está aprovechando (también tuve que modificarlo para cambios que hice en la serie):

Puedes ver que estamos codificando el actor para botones fillFields y click para nuestros campos de formulario actualizados.

Mientras solucionaba problemas en mi integración de Codeception con Yii, encontré útil ejecutar estas pruebas modo verboso:

Aquí está la salida verbosa de las pruebas funcionales de Login--en la Terminal de MacOS, PASSED y FAILED están coloreados en rojo o rosa e invertidos para visibilidad.

En general, hay unas cuantas cosas qué aprender para comenzar con Codeception y codificar adecuadamente tus pruebas. Pero los resultados son impresionantes y útiles.

Pruebas Unitarias

Básicamente, las pruebas unitrarias son pruebas programáticas de nuestra infraestructura y modelos. Idealmente, escribiríamos pruebas por cada método y variación de uso de nuestros modelos.

Desaforunadamente, no pude hacer trabajar las pruebas unitarias dentro de nuestro árbol debido a ya sea pequeños bugs de Yii aún por ser liberados o problemas de configuración entre Codeception y yii2-user el cuál integramos en Cómo Programar Con Yii2: Integrando Registro de Usuarios.

Abordaré las pruebas unitarias nuevamente en nuestra serie Startup la cuál no usa yii2-user pero en su lugar usa la integración de usuario incluída de árbol Avanzado de Yii.

Veamos un par de ejemplos del árbol Yii2-app-basic.

Probando Correos de Formularios de Contacto

El hello/tests/codeception/unit/models/ContactFormTest.php prueba enviar un email mediante uso programático de modelos:

Fui incapaz de hacer pasar estas pruebas exitosamente debido a un pequeño bug en Yii el cúal no ha sido actualizado aún (o al menos no pude encontrar el código actualizado). Mi versión del código base de yii estaba nombrando correo de salida con estampas de tiempo y el código de arriba estaba buscando un nombre de archivo fijo. En consecuencia, siempre falló. Aún así, es útil ver cómo las pruebas programáticas pueden usar modelos para generar un archivo y después biscar ese archivo y validar sus contenidos para verificar que el código está funcionando.

Pruebas de Login

Echémos un vistazo a Let's look at hello/tests/codeception/unit/models/LoginFormTest.php. De nuevo, mi uso de yii2-user lo hizo muy difícil de integrar al momento de escribir este tutorial, sin embargo, podemos ver la aproximación conceptual a las funciones de pruebas del modelo de usuario.

Aquí está testLoginCorrect(), el cuál busca si el inicio de sesión tiene éxito con una contraseña correcta:

Este usa el modelo LoginForm para loguear programáticamente al usuario y despues programáticamente busca para ver si el usuario actual de Yii ya no es un invitado.

¿Qué Sigue?

Espero que hayas disfrutado aprender sobre Codeception y su integración con Yii, a pesar de algunos bloqueos con los que me topé. La instalación por defecto de yii2-basic hoy debería desempeñarse mejor.

Si te gustaría leer más acerca de decidir cuándo y qué probar y por qué, recomiendo leer Vista Genera de Pruebas Yii. Ciertamente hay más que aprender acerca de Codeception y escribir pruebas más completas.

Está al pendiente de nuevos tutoriales en nuestra serie Programando Con Yii2 mientras continuamos sumergiéndonos en diferentes aspectos del framework. Si quisieras saber cuando llegue el siguiente tutorial de Yii2, sígueme en @reifman en Twitter o revisa mi página de instructor.

Puede que también quieras revisar nuestra serie Construyendo Tu Startup con PHP, la cuál usa la plantilla avanzada de Yii2 mientras construímos nuestra aplicación del mundo real. De hecho, puedes probar la aplicación startup, Planificador de Reuniones hoy.

Enlaces Relacionados

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.