En mi último artículo, en esta serie sobre la programación orientada a objetos avanzados (OOP) para el desarrollo de Php WordPress, he demostrado cómo configurar la prueba de WordPress para las pruebas de integración. Anteriormente, escribí sobre las pruebas unitarias, que mostré cómo correr en un entorno aislado. Estas pruebas no dependían de WordPress en absoluto, por lo que solo podían ejecutarse en el PHP del sistema. Por otro lado, las pruebas de integración cubren la interacción entre complemento y WordPress, por lo que necesitan un WordPress completo. Mostré cómo configurar esas pruebas usando VVV o Docker. En el ejemplo de complemento, configuramos las pruebas de integración para ejecutarse con Docker. Creo que la configuración inicial para Docker es casi la misma, si no más fácil que la configuración de Vagent y VVV. Crear un entorno de WordPress, desde cero, que es adecuado para el desarrollo local y la ejecución de pruebas automáticas para PHP y JavaScript como parte de un sistema de integración e implementación continua es mucho más simple con Docker que Vagrant. Mostré el único archivo que se necesita para crear ese archivo Docker en mi última publicación. Creo que podría hacer algo similar a un vagabundo, pero no conozco Ansible o Puppet ni ningún tipo de sistema de secuencias de comandos de suministro de servidor, necesitaría hacerlo sin un Docker.
No quiero aprender todo esto. En cambio, quiero ir al complemento que tengo y escribir un pedido para instalar el compositor de entorno WP-Install y uno para ejecutar las pruebas WP-compositor de las pruebas de integración. Eso es todo el escenario, ahora es el momento de hablar sobre cómo escribir estas pruebas. Específicamente, veamos cómo las hipótesis que estamos dispuestas a hacer son diferentes al escribir pruebas de integración, a diferencia de las pruebas unitarias. Revertir nuestras hipótesis en mi artículo sobre pruebas unitarias, hablé sobre cómo algunas de las pruebas se basaron en la suposición de que WordPress funcionará correctamente. Según esta suposición, escribí pruebas basadas en datos simulados. Estas hipótesis permiten que esas pruebas demuestren que la API pública del código es consistente y que la función básica, lo que se realiza con los trabajos de entrada. Efectos secundarios: suponga que la conexión con WordPress está correctamente conectada, tendrá resultados consistentes y el resultado consistente producirá el efecto correcto en WordPress. Las pruebas de integración hacen que la hipótesis opuesta: suponga que nuestro código funciona aislado y pruebe sus efectos sin aislamiento.
Si estuviéramos haciendo fregaderos, escribiríamos pruebas unitarias para asegurarnos de que los grifos estén abiertos y detenidos y que produzcan agua caliente o fría de acuerdo con las instrucciones y luego escribirían una prueba de integración para asegurarse de que el agua haya entrado en el fregadero en lugar de solo vertido. En el piso, o parte de él entra en el fregadero y parte de él fluye fuera de la tubería demasiado temprano. Pruebas de escritura ¿Qué probamos? El código que hemos creado hasta ahora afecta a WordPress de dos maneras: agrega un filtro que da como resultado diferentes resultados WP_Query y REST API. Por lo tanto, debemos probar que el efecto de este código es que el filtro se ha agregado de la manera que queríamos ser, así como, en las situaciones correctas, los resultados de la API WP_QUEY y REST se modifican como esperamos y que allí allí no son efectos. Cuando no debe existir. Probar la adición y eliminación de filtros para este primer grupo de prueba, solo buscamos demostrar que nuestro código puede agregar y eliminar ganchos. La clase FilterWpQuery tiene un método addFilter () y un método llamado remveFilter (). Podemos cubrir esas interacciones probando que addFilter () hace que WordPress informe que se ha agregado el filtro. También podemos probar que RemoutFilter () hace que WordPress informe que el filtro ha sido eliminado. Otras pruebas que tenemos cubre lo que sucede si se agrega el filtro. WordPress Core tiene pruebas para cubrir ganchos. Es suficiente para cubrir este efecto.
Para probar si se agrega el gancho, instantará la clase y lo usaremos para agregar el filtro y luego usaremos el phpunit para afirmar que el resultado de has_filter () es lo que esperaríamos si el filtro hubiera agregado:
Para probar que el gancho se puede eliminar, instantarse la clase y usarlo para agregar y luego eliminar el filtro y luego usar el phpunit para afirmar que el resultado de has_filter () es lo que esperaríamos si el filtro hubiera agregado y Luego se eliminan: estas dos pruebas muestran que podemos afectar a WordPress. Antes de pasar a probar cómo hacemos WordPress, debemos probar que los filtros no tienen efectos secundarios no deseados. Probamos un sistema que a veces cambia qué publicaciones devolverán WP_Query, debemos asegurarnos de que nuestro sistema no siempre cambie qué publicaciones devuelve WP_Query.
Nuestro sistema está diseñado para modificar WP_Query, cuando se usa por una ruta API particular. Más tarde, probaremos esa ruta. Por el momento, agregaremos nuestro filtro y luego ingresaremos una publicación en la base de datos, luego verifique si la publicación devolvió una WP_Query para todas las publicaciones. Esto debe hacerse de forma predeterminada, para asegurarse de que todavía lo hace cuando agregamos nuestro filtro.
En esta prueba, utilizamos la fábrica de tests de WordPress para crear publicaciones. Una clase que implementa el modelo de fábrica, que traté en una publicación anterior, es una clase que crea objetos de otras clases.
Un uso excelente para el modelo de fábrica es crear datos de prueba. Tener un método estándar único para crear un tipo de datos de prueba, en este caso, WordPress publica, disminuye el ensayo del código y nos asegura que podemos confiar en nuestros datos de prueba. También es más fácil escribir pruebas. La publicación que se crea con Post Factory es lo que nuestras pruebas indican que el resultado del interrogatorio es el mismo que. La fábrica crea el resultado esperado, con el que se comparan nuestras pruebas. No tenemos que probar cada parte de la publicación resultante, las pruebas básicas de WordPress cubren WP_POST. Probando los resultados WP_Query aún no hemos alcanzado donde los resultados WP_Query no sean simulados. Queremos que las pruebas demuestren que todo el sistema es confiable, de acuerdo con su estándar, siempre elimina una serie de objetos WP_POST que tienen el tamaño correcto.
Más tarde podemos cambiar lo que está sucediendo internamente, no se preocupe de que estemos cerca de ese artículo. Cuando lo hagamos, el nuevo código necesitará nuevas pruebas unitarias. Pero no necesitaremos nuevas pruebas de integración. De hecho, cuando implementamos otro sistema de ejecución de búsqueda, por ejemplo, Elasticsearch o SearchWP, debemos requerir que estas pruebas de integración pasen sin ningún cambio.
Toda esta funcionalidad está encapsulada en el método getPosts (). Por lo tanto, las dos pruebas que necesitamos para cubrir este método son una para demostrar que devuelven una matriz y la otra que la matriz tiene wp_posts adecuadas. Probar que GetPosts () devuelve una matriz es simple. Escribimos una prueba para afirmar que el resultado de la función que es_Array () cuando los resultados de getPosts () son verdaderos. Mostramos que es una matriz: esta prueba ha cubierto el tipo de resultados: los resultados del tipo de matriz. La siguiente prueba cubre el contenido de los resultados: la matriz contiene wp_posts. Para esto, usaremos getPosts () para obtener la matriz de publicación y pasar por el bucle, diciendo que cada uno es un wp_post:
Probar las rutas API descansa Todas estas pruebas muestran que WP_Query produciría los resultados que esperamos, cuando les decimos que estamos en el contexto correcto. Eso está bien, pero no prueba que los resultados serán correctos en ese contexto. Ahora es el momento de probar el efecto que tiene nuestro código en las respuestas REST API que está diseñada para modificar. Anteriormente hemos cubierto la prueba de los puntos finales para el par. Este artículo cubrió puntos finales personalizados. Estas pruebas siguientes cubren valores predeterminados modificados. Pero la forma en que probamos es similar. No haremos una solicitud HTTP real, esto nos llevaría a aceptar. Usaremos un wp_rest_server simulado, el mismo uso de pruebas básicas de WordPress.

Necesitamos confiar en la suposición de que WordPress simuló WP_REST_SERVER reproduce con precisión el comportamiento de la API de WordPress.Esta suposición se puede hacer debido a la suite de prueba de núcleo de WordPress.Si encuentra un problema con las pruebas de WordPress que cubren la API REST de WordPress, entonces debe abrir un problema en Core Trac y enviar un parche.Necesitaremos dos pruebas.Uno para probar que la lógica condicional en nuestro sistema, que debería volver en este contexto.La segunda prueba demostrará que los resultados son los resultados que nuestro sistema debería generar.Aquí está nuestra primera prueba, envíe la solicitud y los estados que deberían Filter () devuelve verdadero:
Esto demuestra que el sistema sabe que debe filtrar los resultados. Ahora demostremos que el contenido del conjunto de resultados es correcto. Esto es muy similar a las pruebas de los resultados WP_QUEY. Simplemente verificamos si vemos las publicaciones correctas de WordPress que resultan del resto que se usa naturalmente. Solo probamos el efecto de nuestro sistema. Esta prueba comienza lo mismo que la última, creando una solicitud simulada. Esta vez, pasamos por los resultados y los comparamos con el resultado del método getPosts (). Es exactamente el mismo método que se usa debajo. Debe producir los mismos resultados. Si algo estuviera mal con nuestro código, esta prueba compararía esos resultados esperados con un objeto WP_Error u otro conjunto de resultados y, por lo tanto, fallaría. Lo que es genial en este modelo es que cuando cambia el método getPosts (), también lo hacen los datos con los que se comparan las pruebas. Esta prueba no verifica datos específicos: otras pruebas pueden hacer esto. Solo se asegura que estas dos formas diferentes de acceder a los mismos datos sigan sincronizados. Puede parecer un punto pequeño. No porque antes de estas pruebas, escribí o identifiqué pruebas que hacen que esta prueba haga un pequeño número de declaraciones y cubra una gran cantidad de funcionalidad del sistema, que la mayoría de nosotros no controlamos. Esta última prueba se convierte en la prueba suprema de nuestro sistema. Es el resultado final. Pero no es diferente de ninguna otra prueba. Cada uno demuestra algo pequeño y supone que cada prueba se pasa. La prueba se refiere a hipótesis seguras.
Una vez que falla una prueba, todos los supuestos no son confiables. En el próximo artículo de esta serie, abordaré la configuración de Travis, pero para ejecutar las pruebas, en varios entornos, para todas las demandas creadas en el depósito de GitHub. Este tipo de automatización de pruebas, combinado con un flujo de trabajo Git-flujo, requerirá que en el futuro todos los cambios en el código requieren todas las pruebas. Llamamos a esta automatización de pruebas de integración continua o en resumen. Pensar en suposiciones de mi estrategia para pruebas e integración unitarias y el uso de un entorno diferente para cada tipo de prueba se basa en algunas hipótesis que vale la pena preguntar. Por ejemplo, hay marcos de burla muy completos, como wp_mock y burla, que podrían proporcionar datos suficientemente confiables para probar mi integración de WordPress sin tener un sitio de WordPress. Iré de esta manera, porque creo que es más fácil enseñar y comprender cómo usar Phapit para aislar las pruebas unitarias es un precursor para usarlo con otras herramientas. El uso de Phunpit con WordPress Test Suite, como acabo de hacer, fue un ejemplo práctico de otra herramienta. Muchas de las otras herramientas que podríamos querer trabajar, por ejemplo, un Behat, un marco de prueba basado en PHP que podemos usar con WordPress debido a esta serie para pruebas de integración.
OOP Avanzado para WordPress Parte 5: Uso de WordPress Test Suite para prueba de integración
Tags OOP Avanzado para WordPress Parte 5: Uso de WordPress Test Suite para prueba de integración
homefinance blog