Pridanie testov jednotiek do existujúceho doplnku WordPress

Zatiaľ sme urobili niečo viac, než aby sme vám predstavili myšlienku vytvárania testov pre vaše doplnky WordPress a hovorili o množstve ďalších výrazov, ktoré musíte pochopiť, aby ste sa mohli hlbšie ponoriť do testovania vášho kódu. Dnes to urobíme prakticky tak, že vezmeme jeden z mojich bezplatných doplnkov a pridáme niekoľko testov jednotiek, ktoré vám ukážu, ako to poskladať.

Plugin nájdete na Github alebo WordPress.org. Rovnako ako môj predchádzajúci príspevok predpokladám, že máte nainštalované WP CLI a viete nastaviť základné testy. Ak sa nemôžete pozrieť na môj príspevok, ktorý vám predstavuje testovanie jednotiek vo WordPress.

Na rozdiel od poslednej doby potrebujeme iba lešenie testov, aby sme mohli začať s nasledujúcim príkazom v našej inštalácii WordPress.

wp scaffold plugin-tests wptt-ics-feeds

Teraz sa pustíme do písania niekoľkých testov.

Prvá vec, ktorú chcem otestovať, je uistiť sa, že odkazy, ktoré používateľ vidí vo svojom profile s informačnými kanálmi kalendára, sú správne. Konkrétne sa pozrieme na get_subscribe_link funkciu.

Môžete vidieť dokončené testy pre túto sekciu tu.

Začnime skopírovaním predvoleného vzorového testovacieho súboru a jeho premenovaním na test-feed-links.php. Vždy rád vytváram rôzne súbory pre oblasti doplnkov, pre ktoré píšem testy, aj keď to znamená, že mám veľa súborov, s ktorými sa musím zaoberať. Je oveľa jednoduchšie udržať si poriadok s jasne označenými súbormi.

Čítať:  Lietajúce stránky – jednoducho pridajte predbežné načítanie na webové stránky WordPress

Tento doplnok je o niečo starší a pri spustení vytvára inštanciu globálnej premennej. To nám umožňuje volať to globálne, keď sme v našej funkcii nastavenia, aby sme mali prístup ku kódu doplnku. Budeme tiež musieť použiť WordPress Factory na nastavenie nového používateľa, aby sme mohli otestovať poskytnuté odkazy s týmto používateľom. To znamená, že naše funkcie setUp a tearDown by mali vyzerať takto.

public function setUp(){

parent::setUp();

// získanie globálneho doplnku

$this->plugin = $GLOBALS[‘wptt_ics_feeds’];

// vytvoriť falošného používateľa

$this->editor = new WP_User( $this->factory->user->create( array( ‘role’ => ‘editor’ ) ) );

}

public function tearDown(){

parent::tearDown();

wp_delete_user( $this->editor->ID, true );

}

Teraz sa môžeme pustiť do písania testu odkazov na naše informačné kanály. Napíšeme dva rôzne testy na testovanie oboch situácií, v ktorých sa funkcia link môže ocitnúť. Najprv otestujeme get_subscribe_link() bez akýchkoľvek argumentov.

/**

* Testuje odkaz na základný informačný kanál bez autora

*/

public function test_base_feed_link(){

$feed_link = $this->plugin->get_subscribe_link();

$complete_link = site_url() . ‘/?feed=wptticsfeeds’;

$this->assertEquals( $feed_link, $complete_link, ‘Odkazy na feed nie sú rovnaké’ );

}

Prvá vec, ktorú kód vyššie urobí, je prístup k našej inštancii doplnku, ako je definovaná vo funkcii setUp, a zavolanie funkcie get_subscribe_link(). Ďalej natvrdo nakódujem očakávaný výstup funkcie, aby som mal s čím porovnávať. Nakoniec používame tvrdiť Rovná sa na porovnanie týchto dvoch hodnôt.

Potom sa môžem vrátiť k terminálu a spustiť testy pomocou príkazu phpunit. Ak moje testy prejdú, uvidím niečo ako výstup nižšie. Ak neprejdú, dostanem veľké červené varovanie namiesto zeleného pruhu, čo znamená, že musím zistiť, prečo neprešli a opraviť testy.

Čítať:  Čo znamená koniec životnosti PHP 5.6 pre používateľov WordPress?

V tomto prípade naše testy prešli a môžeme prejsť k testovaniu výstupu našej funkcie odkazu, ak zadáme meno autora. Tento test si môžete pozrieť nižšie.

/**

* Odkaz na testovanie zdroja s autorom

*/

public function 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, “Odkazy na feed s autorom nie sú rovnaké’ );

}

Tu robíme takmer to isté, čo sme urobili, keď sme predtým testovali náš odkaz. Zmena spočíva v tom, že odovzdáme používateľa, ktorého sme vytvorili pomocou našej funkcie setUp, a potom otestujeme, či sa tento odkaz zobrazí podľa očakávania s asertEquals.

Teraz prejdime k testovaniu vlastného filtra vo vnútri doplnku.

Testovanie filtra WordPress pomocou PHPUnit

V minulosti som mal nejaké spory s inými vývojármi ohľadom testovania filtrov. Niektorí sa neobťažujú testovať svoje interné filtre zásuvných modulov, ale myslím si, že by ste mali testovať tieto filtre. Niekedy sa názvy filtrov zmenia a vy na to zabudnete, preto to nikde nezdokumentujte ani nekontrolujte použitie filtra. Napísanie jednoduchého testu pre váš filter to zvýrazní, pretože keď zmeníte názov filtra, dôjde k chybe testu.

Pre tento test pridáme do nášho priečinka testov nový súbor s názvom test-filters.php. Tento súbor použijem na testovanie všetkých budúcich filtrov, ktoré je potrebné v plugine otestovať. Tentoraz potrebuje naša funkcia setup iba vytvoriť inštanciu nášho pluginu a naša funkcia tearDown nemusí robiť nič. Pozrite si kód nižšie.

Čítať:  Ako vytvoriť lepší obsah na svojom webe WordPress

public function setUp(){

parent::setUp();

// získanie globálneho doplnku

$this->plugin = $GLOBALS[‘wptt_ics_feeds’];

}

public function tearDown(){

parent::tearDown();

}

Ďalej musíme napísať test pre náš filter, ktorý môžete vidieť nižšie.

/**

* Testuje, že príspevok, kde je možné zmeniť čas pomocou filtra

*/

public function test_posts_where_filter(){

add_filter( ‘wptt_ics_feeds_how_old’, array( $this, ‘new_where’ ), 10, 2 );

$output = $this->plugin->dva_mesiace( ” );

$date = date(‘Ym-d’, strtotime( $this->new_where() ) );

$this->assertStringContainsString( $date, $output, ‘Filter dátumu nefungoval’ );

}

verejná funkcia new_where(){

návrat ‘-1 týždeň’;

}

Prvá vec, ktorú urobíme, je zavolať náš filter a potom mu odovzdať funkciu new_where. Vždy som rád napísal samostatnú funkciu pre testy filtrov, pretože som ich nakoniec použil vo viacerých testoch natoľko, že mám pocit, že to neskôr ušetrí prácu. Naša funkcia new_where odovzdá nášmu filtru reťazec -1 týždeň.

Ďalej zavoláme našu funkciu two_months() vo vnútri doplnku. Potom použijeme štandardné PHP dátum získajte formát, ktorý očakávame pre dátum. Keďže sa väčšinou obávam, že dátum je správne analyzovaný v doplnku, ktorý používam claimStringContainsString skontrolujte, či výstup funkcie two_months obsahuje rovnaký dátumový reťazec ako premenná $date.

Opäť, ak vaše testy prejdú, všetko by malo byť zelené. Ak zlyhajú, namiesto príjemného zeleného pruhu dostanete veľké červené varovanie.

Prečo netestujeme výstup informačného kanála ICS

Upozorňujeme, že konečný výstup nášho informačného kanála ICS som netestoval. Aj keď je to možné, má veľa pohyblivých častí, ktoré môžu zlyhať a nemajú nič spoločné s mojím kódom. Mohol by som poslať informačný kanál ICS do online validátora a potom prijať odpoveď JSON a analyzovať ju, aby som skontroloval, či je platný.

Čítať:  Ako zastaviť spam v komentároch vo WordPress

Ak požiadavka HTTP zlyhá, môj test zlyhá. Ak sa služba overenia online vypne, môj test zlyhá. Existuje veľa ďalších scenárov, ktoré môžu tiež spôsobiť zlyhanie môjho testu bez dôvodu, je to moja chyba. Z tohto dôvodu som sa rozhodol netestovať konečný informačný kanál programovo a prišiel som na to, že ho môžem otestovať tak, že sa prihlásim na odber informačného kanála v mojom kalendári a uvidím, že moje príspevky sú v skutočnosti v kalendári podľa očakávania.

Toto nie je testovanie jednotiek

Som si istý, že niektorí z vás sa na to pozerajú a hovoria, že nepíšem jednotkové testy, a mali by ste pravdu. Píšem integračné testy, pretože môj kód sa integruje s WordPress, aby testy fungovali. Áno, môžete použiť WP_Mock falošný WordPress na písanie skutočných jednotkových testov, ale väčšinou mi záleží na tom, aby môj kód fungoval s WordPress.

Dnes sme sa pozreli na pridanie niekoľkých testov do existujúceho doplnku WordPress ako praktický príklad toho, ako môže testovanie fungovať pre vaše projekty. Ak chcete pokračovať v učení, pozrite si obchodný prípad pridania testovania do vášho procesu ako vlastníka firmy. Môže byť ťažké prehliadnuť počiatočné náklady, pretože vývoj bude trvať dlhšie, ale vyplatí sa.

Nové Publikácie:

ODPORÚČANIE