Kiedy CloverCoverage zawodzi i przechodzi jednocześnie
W poprzednich postach pisałem o zaletach korzystania z GrumPHP. Jednym z narzędzi, których używaliśmy w projektach przez ostatni rok lub dłużej, jest Clover.
Zdjęcie: Quentin REY na Unsplash
Jakiś czas między tym, kiedy zaczęliśmy go używać, a tym tygodniem, zawsze nie działał na moim lokalnym komputerze, ale nie na komputerze, na którym wdrażaliśmy nasz kod.
I nie, nie było to spowodowane nieprawidłowymi dyrektywami lub komentarzami w testach jednostkowych i nie było to spowodowane błędną konfiguracją PHPUnit (wykonywał wszystkie testy i raportował je zgodnie z oczekiwaniami).
Więc co daje?
Kiedy CloverCoverage zawodzi
Wersja TL; DR tego:
Musisz mieć poprawnie zainstalowany Xdebug, ponieważ CloverCoverage wymaga sterownika – czyli Xdebug – do poprawnego działania. Problem polega na tym, że jeśli używasz Homebrew, nie możesz go zainstalować tak, jak kiedyś.
Pozostała część tego postu przeprowadzi Cię przez instalację Xdebug, poprawną konfigurację w ramach Twojej konfiguracji PHP, ustawienie poprawnej konfiguracji PHPUnit, a następnie sprawdzenie wszystkich sprawdzeń, aby przy następnym uruchomieniu GrumPHP wszystkie zielone znaczniki wyboru .
A jako dodatkowy bonus, następnym razem, gdy uruchomisz PHPUnit, powinieneś otrzymać ładnie wyglądający raport, który będzie do tego pasował. Oto, co musisz zrobić.
Po pierwsze, zauważ, że jest to oparte na założeniu, że jesteś:
- przy użyciu Homebrew,
- mieć zainstalowany PHPUnit,
- mieć zainstalowane PHP 7.1 (w momencie pisania tego postu używam PHP 7.1.19),
- nie działają poprawnie Clover.
Aby zweryfikować kilka rzeczy, uruchom następujące polecenie w terminalu :
Upewnij się, że używasz przynajmniej PHPUnit 7.1.4.
Następnie sprawdź swoją wersję PHP :
I upewnij się, że używasz co najmniej PHP 7.1.19 (Twoje dane wyjściowe nie wyglądają dokładnie tak, jak moje, zwłaszcza że odnosi się do Xdebug, ale o to właśnie chodzi).
W tym momencie jesteśmy gotowi do zainstalowania Xdebug i rozpoczęcia niezbędnych zmian w konfiguracji.
1 Zainstaluj Xdebug
Powodem, dla którego musimy zainstalować Xdebug inaczej niż wcześniej, jest to, że nie jest on już obsługiwany przez Homebrew. Bez obaw, ponieważ instalacja jest równie łatwa dzięki Pecl.
Aby go zainstalować, wprowadź następujące polecenie w swoim terminalu:
Powinieneś wtedy zobaczyć komunikat, że zostało zainstalowane i że rozszerzenie zostało dodane do twojego pliku konfiguracyjnego PHP. Z mojego doświadczenia wynika, że Pecl nie radzi sobie z tym ostatnim krokiem.
2 Znajdź plik binarny Xdebug na dysku
Aby rozwiązać ten problem, musimy:
- zlokalizuj pełną ścieżkę rozszerzenia Xdebug,
- umieść w pełni kwalifikowaną ścieżkę do rozszerzenia w naszym pliku konfiguracyjnym PHP
Aby znaleźć ścieżki, w których może znajdować się Xdebug, użyj następującego polecenia :
Możesz zwrócić kilka ścieżek (najlepiej jednak, gdybyś otrzymał tylko jedną). Jeśli otrzymasz więcej niż jeden, poszukaj tego zainstalowanego w ścieżce zawierającej katalog Pecl. Prawdopodobnie będzie wyglądać mniej więcej tak :
/usr/local/lib/php/pecl/20160303/xdebug.so
Gdy otrzymasz listę wszystkich miejsc , w których zainstalowany jest Xdebug.so, skopiuj ścieżkę do pliku, abyśmy mogli skonfigurować PHP tak, aby się do niego odwoływał i używał go poprawnie.
3 Zaktualizuj konfigurację PHP
Następnie musimy zaktualizować konfigurację PHP. Jest to łatwe, ponieważ wystarczy dodać pojedynczą linię do pliku PHP.ini. Oczywiście, jeśli masz uruchomionych wiele wersji PHP, upewnienie się, że dodasz to do właściwego pliku konfiguracyjnego, będzie zależało od używanej wersji PHP.
Jeśli masz wiele wersji PHP działających na swoim komputerze, będziesz mieć wiele wersji pliku konfiguracyjnego PHP. Jeśli masz zainstalowaną jedną wersję, będziesz mieć pojedynczy plik php.ini .
Zwykle znajduje się w /usr/local/etc/php/7.1/ jako php.ini , jeśli używasz PHP 7.1, ale Twoja lokalizacja może być nieco inna. Ale kolejny krok pozostaje taki sam.
Gdy to zrobisz, upewnij się, że dodałeś następujący wiersz do pliku php.ini . Może to być w każdym miejscu w pliku, ale pamiętaj, że musisz dołączyć w pełni kwalifikowaną ścieżkę do Xdebug.so. Plik powinien więc zawierać ten wiersz :
zend_extension="/usr/local/lib/php/pecl/20160303/xdebug.so"
Stamtąd wszystko powinno działać. Możesz to sprawdzić , uruchamiając :
A potem powinieneś zobaczyć następujący komunikat:
PHP 7.1.19 (cli) (zbudowany: 25 czerwca 2018 10:42:21) (NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
z Xdebug v2 .6.0, Copyright (c) 2002-2018, Derick Rethans
z Zend OPcache v7.1.19, Copyright (c) 1999-2018, Zend Technologies
Zwróć uwagę na czwartą linię, która zawiera uwagę o Xdebug. Jeśli to widzisz, możesz iść.
4 Konfiguracja PHPUnit
W tym momencie ostatnią rzeczą, którą musisz zrobić, jest upewnienie się, że plik phpunit.xml jest poprawnie skonfigurowany. Oto prosty przykład tego, jak wygląda moja (w tym wsparcie dla 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>
Następnie możesz ręcznie uruchomić PHPUnit i zobaczyć ładny wynik pokrycia kodu.
Możesz też uruchomić GrumPHP, aby zobaczyć stały zielony znacznik wyboru (zakładając, że twoje testy mieszczą się w zakresie zdefiniowanym w grump.yml ).
Wynik końcowy
Chociaż może się wydawać, że jest to wiele kroków (i przypuszczam, że tak), nie zajmuje dużo czasu, aby uzyskać tę konfigurację i działać poprawnie. Mamy nadzieję, że powyższy przewodnik pozwoli Ci zaoszczędzić trochę czasu podczas pracy z PHP, PHPUnit i tak dalej, gdy CloverCoverage zawiedzie (i uda się jednocześnie podczas ciągłego wdrażania).
Obecnie piszę e-booka (wraz z wieloma innymi treściami premium). Jeśli jesteś zainteresowany, sprawdź co otrzymujesz.



