Hasta ahora hemos hecho poco más que presentarle la idea de crear pruebas para sus complementos de WordPress y hablar sobre algunos de los términos adicionales que necesita comprender para profundizar en las pruebas de su código. Hoy lo haremos práctico tomando uno de mis complementos gratuitos y agregando algunas pruebas unitarias para mostrarle cómo armarlo.
Puedes encontrar el complemento en GitHub o WordPress.org. Al igual que en mi publicación anterior, supongo que tienes WP CLI instalado y puedes configurar pruebas básicas. Si no puedes, consulta mi publicación que te presenta las pruebas unitarias en WordPress.
A diferencia de la última vez, sólo necesitamos realizar scaffolding de las pruebas para poder comenzar con el siguiente comando en nuestra instalación de WordPress.
pruebas-complemento de andamio de wp wptt-ics-feeds
Ahora comencemos a escribir algunas pruebas.
Probar enlaces de usuario
Lo primero que quiero probar es asegurarme de que los enlaces que un usuario ve en su perfil con los feeds del calendario sean correctos. Específicamente, vamos a ver el get_subscribe_link función.
Puedes ver las pruebas completadas para esta sección aquí.
Comencemos copiando el archivo de prueba de muestra predeterminado y cambiándole el nombre a test-feed-links.php. Siempre me gusta crear archivos diferentes para las áreas de los complementos para los que estoy escribiendo pruebas, incluso si eso significa que tengo muchos archivos con los que lidiar. Es mucho más fácil mantenerse organizado con archivos claramente etiquetados.
Este complemento es un poco más antiguo y crea una instancia de una variable global cuando se inicia. Esto nos permite llamar a ese global cuando estamos en nuestra función de configuración para que tengamos acceso al código del complemento. También necesitaremos usar WordPress Factory para configurar un nuevo usuario para que podamos probar los enlaces proporcionados con ese usuario. Eso significa que nuestras funciones de configuración y desmontaje deberían verse así.
configuración de función pública(){
padre::configuración();
// obteniendo el complemento global
$this->complemento = $GLOBALS[‘wptt_ics_feeds’];
// crear un usuario falso
$this->editor = new WP_User( $this->factory->user->create( array( 'rol' => 'editor' ) ) );
}
función pública derribar(){
padre::desmontar();
wp_delete_user( $this->editor->ID, verdadero);
}
Ahora podemos empezar a escribir una prueba para nuestros enlaces de feeds. Escribiremos dos pruebas diferentes para probar ambas situaciones en las que se puede encontrar la función de enlace. Primero, probaremos get_subscribe_link() sin ningún argumento.
/**
* Enlace de alimentación base de pruebas sin autor
*/
función pública test_base_feed_link(){
$feed_link = $this->plugin->get_subscribe_link();
$enlace_completo = site_url() . '/?feed=wptticsfeeds';
$this->assertEquals( $feed_link, $complete_link, 'Los enlaces del feed no son iguales');
}
Lo primero que hace el código anterior es acceder a nuestra instancia de complemento como se define en la función setUp y llamar a la función get_subscribe_link(). A continuación, codifico el resultado esperado de la función para tener algo con qué comparar. Finalmente, utilizamos afirmar es igual a para comparar los dos valores.
Una vez hecho esto, puedo regresar a la terminal y ejecutar las pruebas con el comando phpunit. Si mis pruebas pasan, veré algo como el resultado a continuación. Si no pasan, recibiré una gran advertencia roja en lugar de una barra verde, lo que significa que necesito descubrir por qué no pasan y corregir las pruebas.
En este caso, nuestras pruebas pasaron y podemos pasar a probar el resultado de nuestra función de enlace si ingresamos el nombre de un autor. Puedes ver esta prueba a continuación.
/**
* Enlace del feed de pruebas con el autor
*/
función pública test_author_feed_link(){
$feed_link = $this->plugin->get_subscribe_link( array( 'autor' => $this->editor->ID ) );
$complete_link = esc_url( site_url() . '/?feed=wptticsfeeds&wpttauthor=”. $this->editor->user_login );
$this->assertEquals( $feed_link, $complete_link, “Los enlaces del feed con el autor no son iguales');
}
Aquí hacemos casi lo mismo que hicimos cuando probamos nuestro enlace anteriormente. El cambio es que pasamos el usuario que creamos con nuestra función setUp y luego probamos para asegurarnos de que este enlace salga como se esperaba con afirmarEquals.
Ahora, pasemos a probar el filtro personalizado dentro del complemento.
Probando un filtro de WordPress con PHPUnit
He tenido algunas disputas con otros desarrolladores sobre las pruebas de filtros en el pasado. Algunos no se molestan en probar los filtros de sus complementos internos, pero creo que deberías probar estos filtros. A veces los nombres de los filtros cambian y usted se olvida de esto, así que no lo documente en ningún lado ni verifique el uso del filtro. Escribir una prueba simple para su filtro resaltará esto porque cuando cambie el nombre del filtro ocurrirá un error de prueba.
Para esta prueba, agregaremos un nuevo archivo a nuestra carpeta de pruebas llamado test-filters.php. Usaré este archivo para probar todos los filtros futuros que deban probarse en el complemento. Esta vez nuestra función de configuración solo necesita crear una instancia de nuestro complemento y nuestra función de desmontaje no necesita hacer nada. Vea el código a continuación.
configuración de función pública(){
padre::configuración();
// obteniendo el complemento global
$this->complemento = $GLOBALS[‘wptt_ics_feeds’];
}
función pública derribar(){
padre::desmontar();
}
A continuación, debemos escribir la prueba para nuestro filtro que puede ver a continuación.
/**
*Prueba que el post donde se puede cambiar la hora con un filtro
*/
función pública test_posts_where_filter(){
add_filter( 'wptt_ics_feeds_how_old', matriz( $this, 'new_where' ), 10, 2 );
$salida = $this->plugin->dos_meses( '' );
$fecha = fecha('Ym-d', strtotime( $this->new_where() ) );
$this->assertStringContainsString( $date, $output, 'El filtro de fecha no funcionó');
}
función pública nuevo_donde(){
devolver '-1 semana';
}
Lo primero que hacemos es llamar a nuestro filtro y luego pasarle nuestra función new_where. Siempre me gusta escribir una función separada para las pruebas de filtro porque terminé usándolas en múltiples pruebas y siento que esto ahorra trabajo más adelante. Nuestra función new_where pasará la cadena -1 semana a nuestro filtro.
A continuación llamamos a nuestra función two_months() dentro del complemento. Luego usamos un PHP estándar. fecha función para obtener el formato que esperamos para la fecha. Dado que lo que más me preocupa es que la fecha se analice correctamente en el complemento que uso afirmarCadenaContieneCadena para verificar si la salida de la función two_months contiene la misma cadena de fecha que la variable $date.
Nuevamente, si sus pruebas pasan, entonces todo debería estar en verde. Si fallan, recibirás una gran advertencia roja en lugar de la agradable barra verde.
¿Por qué no probamos la salida del feed de ICS?
Tenga en cuenta que no probé el resultado final de nuestra fuente ICS. Si bien esto es posible, tiene un montón de partes móviles que podrían fallar y no tienen nada que ver con mi código. Podría enviar la fuente ICS a un validador en línea y luego recibir la respuesta JSON y analizarla para verificar si es válida.
Si la solicitud HTTP falla, mi prueba falla. Si el servicio de validación en línea se cierra, mi prueba falla. Hay muchos otros escenarios que también podrían hacer que mi prueba falle sin ningún motivo y sea culpa mía. Debido a esto, elegí no probar el feed final mediante programación y pensé que podía probarlo suscribiéndome a un feed en mi calendario y viendo que mis publicaciones estaban en el calendario como se esperaba.
Esto no es una prueba unitaria
Estoy seguro de que algunos de ustedes están viendo esto y diciendo que no estoy escribiendo pruebas unitarias, y estarían en lo cierto. Estoy escribiendo pruebas de integración porque mi código se integra con WordPress para que las pruebas funcionen. Si, puedes usar WP_Mock falsificar WordPress para escribir pruebas unitarias verdaderas, pero la mayoría de las veces me importa que mi código funcione con WordPress.
Hoy, analizamos agregar algunas pruebas a un complemento de WordPress existente como un ejemplo práctico de cómo las pruebas pueden funcionar para sus proyectos. Para continuar aprendiendo, consulte el caso de negocio para agregar pruebas a su proceso como propietario de un negocio. Puede ser difícil ver más allá del gasto inicial, ya que el desarrollo llevará más tiempo, pero vale la pena.