Cuando CloverCoverage falla y pasa simultáneamente
He hablado sobre las ventajas de usar GrumPHP en publicaciones anteriores. Una de las herramientas que hemos utilizado en proyectos durante el último año o más es Clover.
Foto de Quentin REY en Unsplash
En algún momento entre el momento en que comenzamos a usarlo y esta semana, siempre fallaba al ejecutarse en mi máquina local, pero no en la máquina en la que estábamos implementando nuestro código.
Y no, no fue porque hubiera directivas o comentarios incorrectos en las pruebas unitarias ni porque PHPUnit estuviera mal configurado (estaba ejecutando todas las pruebas y reportándolas como se esperaba).
Entonces, ¿qué da?
Cuando falla la cobertura de Clover
La versión TL; DR de esto:
Debe tener Xdebug correctamente instalado porque CloverCoverage requiere un controlador, es decir, Xdebug, para ejecutarse correctamente. El problema es que si está usando Homebrew, no puede instalarlo como lo hicimos nosotros en un momento dado.
El resto de esta publicación lo guiará a través de la instalación de Xdebug, la configuración adecuada dentro de su configuración de PHP, la configuración adecuada de su configuración de PHPUnit y luego la verificación de todo, de modo que la próxima vez que ejecute GrumPHP, debería obtener todas las marcas de verificación verdes. .
Y, como una ventaja adicional, la próxima vez que ejecute PHPUnit, debería obtener un informe atractivo que lo acompañe. Esto es lo que debe hacer.
Primero, tenga en cuenta que esto se basa en la idea de que usted es:
- usando homebrew,
- tener PHPUnit instalado,
- tener PHP 7.1 instalado (estoy usando PHP 7.1.19 al momento de escribir esta publicación),
- Clover no se ejecuta correctamente.
Para verificar algunas cosas, ejecute el siguiente comando en la terminal :
Asegúrese de ejecutar al menos PHPUnit 7.1.4.
A continuación, verifique su versión de PHP :
Y asegúrese de estar ejecutando al menos PHP 7.1.19 (su salida no se ve exactamente como la mía, especialmente en lo que se refiere a Xdebug, pero ese es el punto de este punto).
En este punto, estamos listos para instalar Xdebug y comenzar a realizar los cambios de configuración necesarios.
1 Instalar Xdebug
La razón por la que tenemos que instalar Xdebug de manera diferente que antes es que Homebrew ya no lo admite. Sin embargo, no se preocupe, ya que es igual de fácil de instalar a través de Pecl.
Para instalarlo, ingresa el siguiente comando en tu terminal:
Luego debería ver un mensaje de que se instaló y que la extensión se agregó a su archivo de configuración de PHP. En mi experiencia, Pecl no da el último paso correctamente.
2 Localice el binario Xdebug en el disco
Para abordar esto, necesitamos:
- busque la ruta completa de la extensión Xdebug,
- coloque la ruta completa a la extensión en nuestro archivo de configuración de PHP
Para encontrar las rutas en las que puede residir Xdebug, use el siguiente comando :
Puede obtener varios caminos devueltos (idealmente, sin embargo, solo debe obtener uno). Si obtiene más de uno, busque el instalado en la ruta que contiene el directorio Pecl. Es probable que se vea algo como esto :
/usr/local/lib/php/pecl/20160303/xdebug.so
Una vez que obtenga una lista de todos los lugares donde está instalado Xdebug.so, copie la ruta del archivo para que podamos configurar PHP para hacer referencia a él y usarlo correctamente.
3 Actualizar la configuración de PHP
A continuación, necesitamos actualizar la configuración de PHP. Hacer esto es fácil ya que simplemente necesitamos agregar una sola línea al archivo PHP.ini. Por supuesto, si tiene varias versiones de PHP en ejecución, asegurarse de agregar esto al archivo de configuración adecuado dependerá de la versión de PHP que esté ejecutando.
Si tiene varias versiones de PHP ejecutándose en su máquina, entonces tendrá varias versiones del archivo de configuración de PHP. Si tiene una sola versión instalada, entonces tendrá un solo archivo php.ini .
Por lo general, se encuentra en /usr/local/etc/php/7.1/ como php.ini si está utilizando PHP 7.1, pero su ubicación puede ser ligeramente diferente. Pero el siguiente paso sigue siendo el mismo.
Una vez que haya hecho esto, asegúrese de agregar la siguiente línea al archivo php.ini . Esto puede estar en cualquier lugar del archivo, pero recuerde que debe incluir la ruta completa a Xdebug.so. Entonces el archivo debe incluir esta línea :
zend_extension="/usr/local/lib/php/pecl/20160303/xdebug.so"
A partir de ahí, todo debería funcionar. Puede verificar esto ejecutando :
Y luego deberías ver el siguiente mensaje:
PHP 7.1.19 (cli) (construido: 25 de junio de 2018 10:42:21) (NTS)
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
con Xdebug v2 .6.0, Copyright (c) 2002-2018, por Derick Rethans
con Zend OPcache v7.1.19, Copyright (c) 1999-2018, por Zend Technologies
Tenga en cuenta la cuarta línea que incluye una nota sobre Xdebug. Si ves esto, entonces estás listo para irte.
4 Configuración de PHPUnit
En este punto, lo último que debe hacer es asegurarse de que su archivo phpunit.xml esté configurado correctamente. Aquí hay un ejemplo simple de cómo se ve el mío (esto también incluye soporte para Clover):
<?xml version="1.0" encoding="UTF-8"?>
<!-- http://phpunit.de/manual/4.1/en/appendixes.configuration.html -->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
bootstrap="./tests/bootstrap.php"
backupGlobals="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
>
<testsuites>
<testsuite name="Plugin">
<directory>./tests</directory>
<exclude>./tests/phpunit</exclude>
<exclude>./src/WordPress/*.php</exclude>
</testsuite>
</testsuites>
<logging>
<log type="coverage-clover" target="./coverage-report/coverage.xml"></log>
<log type="coverage-html" target="coverage-report" lowUpperBound="30" highLowerBound="80"></log>
<log type="coverage-text" target="php://stdout" showUncoveredFiles="false"></log>
</logging>
<filter>
<whitelist>
<directory>./src</directory>
</whitelist>
</filter>
</phpunit>
A continuación, puede ejecutar manualmente PHPUnit y ver un buen resultado de cobertura de código.
O puede ejecutar GrumPHP para ver la marca de verificación verde sólida (suponiendo que sus pruebas estén dentro del rango que definió en grump.yml ).
El resultado final
Aunque parezcan muchos pasos (y supongo que lo son), no se tarda mucho en configurar y ejecutar correctamente. Con suerte, el tutorial anterior le ahorrará un poco de tiempo cuando trabaje con PHP, PHPUnit, etc. cuando CloverCoverage falle (y tenga éxito simultáneamente durante la implementación continua).
Actualmente estoy escribiendo un libro electrónico (junto con una variedad de otro contenido premium). Si estás interesado, echa un vistazo a lo que obtienes.



