Zatiaľ čo mnohí z nás počuli jednotkové testovanie, nie je to veľká téma diskusie v komunite WordPress. Áno, existujú testy pre jadro WordPress. Áno, mnohé z hlavných doplnkov majú radi WooCommerce má testy jednotiekale to neuľahčuje naskočenie do vlaku na testovanie jednotiek.
Aj keď môžete nájsť veľa obsahu o aplikáciách PHP na testovanie jednotiek, veľa ľudí nehovorí o testovaní jednotiek špeciálne pre WordPress. O tom, kde začať pre vývojárov, ktorí sú pripravení zvýšiť kvalitu svojho kódu a chcú sa naučiť, ako do svojej práce pridať testy, sa píše len málo. Ešte horšie je, že niektoré nástroje na testovanie jednotiek vo WordPress nefungujú tak, ako je inzerované, alebo používajú staršie verzie PHPUnit. Problémy, ktoré budete musieť objaviť sami, keď sa pokúsite začať testovať.
To ponecháva veľa ľudí, ktorí chcú začať s testovaním na niekoľkohodinovej ceste, aby pre svoj doplnok spustili aj základné predvolené testy.
Dnes tento problém vyriešime tak, že vám poskytneme aktuálny pohľad na to, ako začať testovať jednotkový kód WordPress.
Veci, ktoré je potrebné nainštalovať
Skôr než sa vrhneme na testovanie jednotiek, budem predpokladať, že áno Laravel komorník a WP CLI nainštalovaný. Na inštaláciu služby Valet používam tieto vynikajúce pokyny z WP Beachesaj keď používam pokyny mysql, nie pokyny MariaDB.
Návod na inštaláciu nájdete WP CLI na stránke WP CLI.
Ak používate systém Windows, možno budete musieť urobiť trochu extra kopanie, aby ste mohli spustiť testy jednotiek. Príručka WordPress obsahuje niekoľko pokynov o ďalších krokoch, ktoré budete musieť vykonať.
Nainštalujte PHPUnit pre WordPress na Laravel Valet
Naším prvým krokom je inštalácia PHPUnit. Zatiaľ čo PHPUnit je momentálne na vetve 9.x, WordPress podporuje iba 7.5.x, čo znamená, že budeme musieť nainštalovať túto staršiu verziu.
Otvorte terminál a použite tieto príkazy.
wget https://phar.phpunit.de/phpunit-7.5.9.phar
chmod +x phpunit-7.5.9.phar`
sudo mv phpunit-7.5.9.phar /usr/local/bin/phpunit
phpunit –verzia
Vyššie uvedený príkaz, stiahnite si PHPUnit. Potom urobíme súbor spustiteľným, aby sa dal spustiť. Ďalej použijeme príkaz sudo na presunutie súboru na správne miesto v našom počítači. Nakoniec skontrolujeme číslo verzie, ktoré by malo vrátiť 7.5.9, keď spustíme posledný príkaz.
Teraz sme pripravení nastaviť náš doplnok s WP CLI a pozrieť sa na naše prvé testy.
Nastavenie nášho doplnku
Spustenie doplnku a získanie nášho testovacieho lešenia jednotiek môžeme zjednodušiť pomocou Príkaz lešenia WP CLI. Tento príkaz nám vytvorí doplnok a pridá všetky súbory, ktoré potrebujeme, aby sme mali základ pre naše testy.
V termináli sa uistite, že ste v správnom adresári WordPress, ktorý chcete použiť, a potom zadajte wp scaffold nexcess-unit-tests. To by vám malo poskytnúť štruktúru priečinkov, ktorá vyzerá takto.
– kôš
– install-wp-tests.sh
– testy
– bootstrap.php
– test-sample.php
– .rozlišovať
– .editorconfig
– .phpcs.xml.dist
– .travis.yml
– Gruntfile.js
– testy-nexcess-unit-tests.php
– package.json
– phpunit.xml.dist
– readme.txt
V závislosti od toho, ako máte nastavený editor kódu a súborový systém, nemusíte vidieť súbory, ktoré začínajú príponou . pretože sa považujú za skryté súbory. Pre naše dnešné účely na nich nezáleží, takže ak ich nevidíte, netrápte sa tým.
Teraz musíme naše testy jednotiek pripojiť k MySQL, aby mohla vytvárať fiktívne údaje, s ktorými môžeme testovať. Teraz otvorte súbor wp-config.php pre vašu inštaláciu WordPress, pretože budete musieť nájsť db_user a db_pass pre ďalší príkaz.
Ak chcete dokončiť inštaláciu testov, prejdite do adresára doplnku a spustite nasledujúci príkaz.
najnovší bin/install-wp-tests.sh localhost
Uistite sa, že používate iný názov databázy ako je vaša inštalácia WordPress. Nechcete, aby sa vaše testy jednotiek miešali s vašimi údajmi, chcete, aby si vytvárali svoje vlastné testovacie údaje vo vlastnej databáze. V opačnom prípade budú db-user a db-pass rovnaké ako váš súbor wp-config.php.
Posledné dva parametre informujú testovací rámec, aby sa pripojil k localhost a nainštaloval najnovšiu verziu WordPress na testovanie. Ak neviete lepšie, nechajte tieto nastavenia tak, ako sú.
Ak by sme teraz spustili phpunit, stále by sme museli vyriešiť niekoľko chýb. Po prvé, z nejakého dôvodu WP CLI nepridáva atribút name do bloku vo vzorových testoch. Otvorte phpunit.xml.dist a zmeňte a uložte súbor.
Všimnite si tiež, že vnútri bloku je PHPUnit povedané, aby ignorovala súbor tests/test-sample.php. Zduplikujme tento súbor a premenujeme ho na test-nexcess.php, aby sme mali súbor, ktorý sa spustí. Potom otvorte nový súbor a zmeňte názov triedy na HostingerTest. Súbor by teraz mal vyzerať takto.
/**
* Trieda HostingerTest
*
* @package Hostinger_Unit_Tests
*/
/**
* Vzorový testovací prípad.
*/
class HostingerTest rozširuje WP_UnitTestCase {
/**
* Jeden príklad testu.
*/
public function test_sample() {
// Nahraďte to nejakým skutočným testovacím kódom.
$this->assertTrue( true );
}
}
Teraz sme pripravení spustiť phpunit z terminálu. Keď to urobíte, mali by ste vidieť niečo ako obrázok nižšie.
Teraz, keď sme potvrdili, že PHPUnit spúšťa naše testy, poďme sa ponoriť trochu hlbšie a napíšme test, aby sme sa uistili, že WordPress pridáva používateľov správne.
nastavenie a zrušenie
Väčšina testov jednotiek bude vyžadovať pridanie špecifických údajov do testovacej databázy. Potom spustíte testy na základe týchto falošných údajov. Na tento účel použite funkcie setUp a tearDown vo svojej testovacej triede.
Vytvorme používateľa a potom sa uistite, že používateľ má možnosť edit_posts. Pridajte nasledujúcu funkciu na začiatok svojej triedy.
public function setUp(){
// vytvoriť falošného používateľa
$this->autor = new WP_User( $this->factory->user->create( array( ‘role’ => ‘editor’ ) ) );
}
Potom pridajte túto funkciu tearDown na koniec triedy.
public function tearDown(){
parent::tearDown();
wp_delete_user($this->autor->ID, true);
}
Toto pridá používateľa s rolou editora pred spustením testov a potom ho odstráni po vykonaní testov.
Teraz napíšme jednoduchý test na overenie, či bol používateľ pridaný správne a má správne schopnosti.
public function testUser(){
// uistite sa, že používateľ setUp má požadované obmedzenie
$user = get_user_by( ‘id’, $this->autor->ID );
$this->assertTrue( user_can( $user, ‘edit_posts’ ), ’Používateľ nemá možnosť edit_posts a ani by nemal’ );
$this->assertFalse( user_can( $user, ‘activate_plugins’ ), ’Používateľ môže aktivovať pluginy a nemal by byť schopný’ );
}
Vyššie začneme získaním objektu používateľa na základe falošného používateľa, ktorého sme vytvorili. Tento objekt budeme potrebovať na otestovanie našich schopností, čo potom urobíme s príkazmi sustainTrue a ClaimFalse.
V tomto prípade asertTrue očakáva, že náš user_can( $user, ‘edit_posts’ ) vráti hodnotu true. Testujeme, aby sme sa uistili, že poskytnutý objekt používateľa má možnosť edit_posts, ako by mal mať editor. Ak by to vrátilo hodnotu false, v termináli by sme videli správu poskytnutú v našom výstupe testu jednotky.
Ďalej testujeme, aby sme sa uistili, že ten istý používateľ nemá schopnosti správcu. Tu používame sustainFalse pri kontrole schopnosti activate_plugins. Toto by malo vrátiť hodnotu false, pretože activate_plugins` je pre rolu správcu vo WordPress, nie pre editorov.
Keď budete mať tento kód pridaný po svojej funkcii nastavenia, prejdite na terminál a spustite phpunit. Mali by ste vidieť, že 2 testy sú v poriadku, s 3 tvrdeniami.
PHPUnit považuje našu funkciu testUser za test a príkazy sustainTrue/assertFalse vo vnútri za tvrdenia.
Čo znamená tá továreň?
Skôr ako skončíme, dovoľte mi upriamiť vašu pozornosť späť na našu funkciu nastavenia. Konkrétne továreň, keď vytvoríme nového používateľa.
Keď používate lešenie WP CLI, poskytuje vám prístup k Trieda WP_UnitTest_Factory. Táto trieda je tu ako pomocník na vytváranie údajov, ktoré budete potrebovať na správne spustenie testov. Túto továreň môžete použiť na vytváranie príspevkov, príloh, komentárov, používateľov, podmienok a niektorých ďalších vecí pre WordPress Multisite.
Toto však nie je jediný nástroj, ktorý môžete použiť na napodobňovanie WordPress pre svoje testy. V budúcom príspevku sa pozrieme na WP_Mock na testovanie častí WordPressu, ktoré vstavaná továreň veľmi nedosahuje.
Dnes sme sa zaoberali pomerne zložitou pôdou, keď sme sa pozreli na jednotkové testovanie vašich projektov WordPress. Viem, že keď som začal testovať jednotku, vyzeralo to skľučujúco, ale stojí to za to, ak chcete kód, ktorý funguje a dá vám vedieť, keď niečo pokazíte, aby vaši zákazníci nemuseli hľadať problém za vás. Z dlhodobého hľadiska ušetríte čas a bolesti hlavy písaním testovateľného kódu a zameraním sa na slušné pokrytie testov vo vašich projektoch.
Zlepšite výkon svojich stránok WordPress s plne spravovaným hostingom WordPress, ktorý sa pri raste vášho webu prispôsobuje bez ohrozenia zabezpečenia. Zistite viac ešte dnes.