La guía para principiantes de pruebas unitarias creación de temas comprobables

En los dos primeros artículos de esta serie, analizamos en detalle qué es la prueba unitaria y cómo aplicarla en el contexto del desarrollo de complementos. Por supuesto, hay más en WordPress que escribir complementos, ¿no? Una parte importante de un trabajo de desarrolladores de WordPress: para algunos es el más parte significativa - es el desarrollo del tema.

Entonces, en este artículo, veremos cómo desarrollar temas comprobables. Específicamente, vamos a ver cómo los temas son diferentes a los complementos y luego vamos a escribir un tema extremadamente simple que se usará para demostrar los principios de las pruebas unitarias y que se puede aplicar en el desarrollo futuro..


Entender cómo los temas son diferentes que los complementos

Antes de comenzar a crear un tema o revisar cualquier código, es importante comprender la diferencia en el desarrollo de temas y complementos. Primero, los complementos se pueden escribir de dos maneras:

  • Como un objeto que encapsula un conjunto de funciones (que es lo que hicimos en este artículo).
  • Como una simple colección de funciones.

Ambos métodos hacen lo mismo: es decir, usan una colección de funciones y filtros para introducir una nueva funcionalidad en WordPress. La principal diferencia es cómo se encapsulan las funciones..

Pero cuando se trata del desarrollo de temas, en realidad solo hay una forma de desarrollar un tema y es mediante el uso de una colección de funciones definidas en funciones.php. Esto presenta los siguientes dos desafíos para escribir pruebas unitarias para temas:

  • Debido a que el tema no está orientado a objetos, no hay manera de que almacenemos el objeto en una matriz como hicimos en el artículo anterior.
  • Debemos determinar una manera de escribir y evaluar las funciones de nuestro tema que pueden ejecutarse independientemente de cargar un tema en un navegador

Debido a que los buenos temas usan una colección de filtros y acciones, vamos a crear un tema que sigue esas mejores prácticas y porque el énfasis de este artículo en particular reside en los temas de pruebas de unidad, se pondrá más énfasis en escribir las pruebas en lugar de creando un tema atractivo y altamente funcional.


Preparación para la prueba unitaria

Antes de codificar, inicialicemos el directorio de nuestro proyecto. Necesitamos configurar el esqueleto del tema para que, en el directorio de temas de WordPress, cree un nuevo directorio para el tema. El mio se llama Tema básico. Agregue los siguientes archivos (los completaremos más adelante):

  • footer.php
  • funciones.php
  • header.php
  • index.php
  • style.css

Continuemos y apaguemos la hoja de estilos para que WordPress reconozca el tema y nos permita activarlo desde el Tablero. Para hacerlo, agrega el siguiente código:

 / * Nombre del tema: Tema básico Tema URI: TODO Versión: 1.0 Descripción: Un tema básico utilizado para demostrar cómo escribir pruebas unitarias para temas. Autor: Tom McFarlin Autor URI: http://tommcfarlin.com Licencia: GNU Licencia pública general v2.0 Licencia URI: http://www.gnu.org/licenses/gpl-2.0.html * /

Para completar, siga adelante y agregue etiquetas de apertura y cierre de PHP al principio y al final de su archivo de funciones. Esto asegurará que tengamos las bases cuando comencemos a escribir funciones de tema más adelante en este artículo.

Y añada un nuevo directorio llamado pruebas. Aquí, tendremos que colocar las pruebas de WordPress.


Pruebas de WordPress: una palabra rápida

Anteriormente en esta serie, proporcioné un enlace a las pruebas de WordPress ubicadas en GitHub. Aunque estas pruebas están bien de usar, las pruebas de WordPress más recientes y mantenidas automáticamente se encuentran en este repositorio de Subversion.

Si eres un desarrollador avanzado, entonces recomiendo revisar esas pruebas; sin embargo, si recién está comenzando con las pruebas unitarias, ¡no hay problema! Proporciono todo el código fuente, incluidas las pruebas de WordPress, en un repositorio de GitHub que podrá descargar, consultar y utilizar para sus propios proyectos..

Una vez que las pruebas están instaladas, el directorio de su tema debería verse así:

Debido a que PHPUnit debe ejecutarse desde la línea de comandos, deberá abrir una sesión de terminal (o un indicador de comandos), vaya a pruebas directorio, y debería poder ejecutarlos usando el siguiente comando (como ejemplo):

 phpunit tests / test_user_capabilities.php

Su terminal debería entonces producir algo como esto:

Aviso: Si no puede ejecutar las pruebas, consulte el primer artículo de la serie para verificar su configuración. Además, su millaje puede variar según el sistema operativo, el servidor web y la configuración de la máquina local. Si terminas teniendo que hacer algo diferente, comparte tus notas en los comentarios para ayudar a otros.

Tema Básico: Una Unidad de Tema de WordPress Probable

En este punto, avancemos y activemos el tema en el Tablero. El tema debería activarse (de lo contrario, asegúrese de que no tenga caracteres extraviados en sus archivos de plantilla). Si intenta ver el tema, naturalmente se mostrará una pantalla en blanco.

Antes de escribir cualquier prueba, avancemos y llenemos nuestros archivos de plantillas con un poco de contenido solo para que podamos tener alguna cosa aparecer en la interfaz.

En header.php, añade el siguiente código:

       <?php wp_title("); ?>   > 
Este es el encabezado.

En index.php, añade el siguiente código:

  
Este es el contenido.

Y en footer.php, añade el siguiente código:

 
Este es el pie de pagina.

Simple, lo sé, pero esto nos dará lo suficiente para trabajar cuando comencemos a escribir pruebas. Guarda tu trabajo, revisa el tema en el navegador y deberías ver esto:


Pruebas unitarias de escritura

Activación del tema de prueba

En tus pruebas directorio, crea un archivo llamado test_basic_theme.php y apaga el archivo para que se vea así:

 // Incluir las funciones para el tema include_once ('… /functions.php'); La clase Test_Basic_Theme extiende la clase final WP_UnitTestCase  //

Arriba, estamos definiendo una clase que se usará para envolver todas las pruebas unitarias de nuestro tema.

Primero, definamos la preparar método. los preparar método es una función proporcionada por el marco de prueba de WordPress y podemos usarla para activar ciertas funciones antes de que se ejecuten las pruebas. Por ejemplo, cuando se ejecutan las pruebas de WordPress, se ejecutan contra el tema predeterminado, es decir, Twenty Eleven. En nuestro caso, queremos ejecutar las pruebas contra nuestro propio tema..

Para hacer esto, tendremos que decirle a WordPress que cambie los temas antes de ejecutar el resto de nuestras pruebas. Dado que esto debe ocurrir antes de que se ejecuten las pruebas, debe definirse en el preparar método. Tener sentido?

Así que vamos a escribir nuestra preparar método:

 función setUp () parent :: setUp (); switch_theme ('Tema básico', 'Tema básico');  // finalizar la configuración

Una vez más, ejecutemos nuestras pruebas. Podemos hacer esto ejecutando el mismo comando que hicimos cuando configuramos la prueba inicialmente:

 phpunit tests / test_basic_theme.php

Permitiendo que hayas hecho todo correctamente, deberías ver un error cuando se ejecuta la prueba:

El mensaje de error es claro, sin embargo: "No se encontraron pruebas en la clase "Test_Basic_Theme"". Así que mitigemos eso y escribamos la primera prueba para el tema. Puede ser algo extraordinariamente simple, pero recuerde de la publicación anterior que no queremos probar sólo la ruta óptima, pero la ruta de falla, también.

Como tal, necesitamos probar que el tema básico está activo y que Twenty Eleven no está activo. Para hacer esto, usaremos el método assertTrue y el método assertFalse y lo haremos en el contexto de dos funciones. Eche un vistazo al código a continuación y actualice su archivo de prueba según corresponda:

 function testActiveTheme () $ this-> assertTrue ('Basic Theme' == get_current_theme ());  // finalizar la función testThemeInitialization testInactiveTheme () $ this-> assertFalse ('Twenty Eleven' == get_current_theme ());  // finalizar testInactiveTheme

Una vez más, ejecuta las pruebas y deberías verlas correr verde. Bien cierto?

Esta es una funcionalidad relativamente simple, así que consideremos algunas funciones avanzadas que nuestro tema podría tener.

Prueba que jQuery está en cola

Fuera de la caja, el tema básico no incluye jQuery, así que lo incluiremos en nuestro tema. Si recuerdas las publicaciones anteriores, la metodología de prueba de unidad adecuada es la siguiente:

  1. Escribe la prueba
  2. Ejecuta la prueba (y fallará)
  3. Escribe el código necesario para hacer pasar la prueba.
  4. Ejecute la prueba (y debe pasar, permitiendo que el Paso 3 se haya realizado correctamente)

Entonces, hagamos exactamente esto para jQuery.

Primero, necesitamos escribir una prueba para determinar si jQuery está cargado. Estaremos usando la función de WordPress wp_script_is. Dado que el tema atraviesa el ciclo de vida normal de la página en un navegador, deberemos indicar manualmente a WordPress que cargue jQuery mediante la función do_action.

 function testjQueryIsLoaded () $ this-> assertFalse (wp_script_is ('jquery')); do_action ('wp_enqueue_scripts'); $ this-> assertTrue (wp_script_is ('jquery'));  // end testjQueryIsLoaded

Antes de continuar, hay algo importante que señalar aquí: no me gusta colocar múltiples aserciones en una sola función porque creo que cada función debería servir para probar un solo propósito; Sin embargo, hay excepciones. Aquí, tenemos que asegurarnos de que jQuery no es cargado antes de llamar acción_.

De todos modos, ejecuta la prueba y fallará. Así que tenemos que añadir el código a funciones.php Eso asegurará que se agregue jQuery a nuestro tema. Para hacer eso, incluye la siguiente función en tu archivo de funciones:

 function basic_add_jquery () wp_enqueue_script ('jquery');  // end basic_remove_jquery add_action ('wp_enqueue_scripts', 'basic_add_jquery');

Finalmente, ejecute la prueba y debería ser verde. Bastante fácil, ¿no es así??

Descripciones de Meta de Prueba

Digamos que queremos incluir una meta descripción por defecto en la página de inicio. En el caso más simple, no será más que la descripción del blog. Entonces, siguiendo nuestra metodología descrita anteriormente, introduzcamos una función para probar que la cadena de descripción meta que se agrega al elemento principal coincide con lo que esperamos:

 function testBasicMetaDescription () $ meta_description = ''; $ this-> expectOutputString ($ meta_description, basic_meta_description ());  // end testBasicMetaDescription

Ejecutalo - fallará Tenga en cuenta que no estoy usando el estándar afirmar la verdad, assertFalse Funciones - habrá más detalles sobre esto en un momento. Ahora, vamos a introducir la siguiente función en funciones.php:

 función basic_meta_description () echo '';  // end basic_meta_description add_action ('wp_head', 'basic_meta_description');

Tenga en cuenta que esta función se engancha en el wp_head acción. Para escribir la meta descripción en el elemento head, debemos eco la cuerda en lugar de regreso la cuerda.

Ahora, tenga en cuenta que en la prueba anterior estamos usando expectOutputString. Esto es útil cuando necesitamos evaluar una función que eco de una cuerda (en lugar de devoluciones una cuerda). Desde el wp_head La acción devolverá una cantidad significativa de datos (es decir, el elemento principal completo), solo necesitamos evaluar la descripción meta que se devuelve. Y es por eso que en lugar de llamar. do_action ('wp_head'), Simplemente estoy llamando a la función en sí y evaluando la salida contra lo que espero que tenga.

Una vez más, ejecute PHPUnit y todas sus pruebas deben pasar.


Prueba todas las cosas

Claramente, solo hemos arañado la superficie de lo que pueden hacer las pruebas unitarias para el desarrollo de nuestro tema. Todavía hay mucho que se puede probar: ni siquiera hemos echado un vistazo a las pruebas de The Loop, varias formas de evaluar formatos de publicaciones o incluso cómo examinar comentarios.

Recuerda esto es Una guía para principiantes y los tres artículos cubren mucho terreno..

En cualquier caso, los principios son los mismos: se trata de asegurarse de que se activen mediante programación la función o acción apropiada y se evalúe su resultado en casos esperados e inesperados..

Finalmente, puede encontrar el proyecto completo junto con funciones documentadas en este repositorio de GitHub.


Recursos

Aquí hay un resumen de los recursos utilizados en este artículo:

  • ¿Qué es la prueba unitaria??
  • Construyendo un complemento comprobable
  • PHPUnit
  • Las pruebas oficiales de WordPress
  • afirmar la verdad
  • assertFalse
  • wp_script_is
  • acción_
  • wp_head
  • expectOutputString
  • Tema Básico en GitHub