Jak správně vrstvit testy, aby nezdržovaly vývoj
Nakonec si osvojte pravidlo: testy by měly být rychlé a izolované. Pokud potřebujete ke spuštění testu databázi nebo síť, děláte to špatně. Vše, co je externí, nahraďte mockem. Tím zajistíte, že testy poběží v řádu sekund a budou spolehlivé. Tento jednoduchý postup vám umožní testovat reducery a async akce i v projektech, které nemají složité prostředí, a přitom si zachovat jistotu, že logika funguje.
Při testování chybových stavů postupujte stejně, ale mock funkce necháte vyhodit výjimku. Ověřte, že je dispatchována akce pro chybu, a že stav aplikace zůstává konzistentní. Častou chybou je testovat pouze šťastnou cestu. Přitom ošetření chyb je v Reduxu kritické, protože uživatel musí vidět, že něco selhalo, a aplikace se nesmí zhroutit. Dále si dejte pozor na to, abyste nemockovali příliš mnoho. Pokud mockujete i samotný dispatch, ztrácíte kontrolu nad tím, co testujete.
Při výběru vývojového prostředí pro Python nejde o to, které je „nejlepší" obecně, ale které nejlépe sedne vašemu způsobu práce. Začněte tím, že si ujasníte, co vlastně píšete. Webové aplikace, datová analýza, skripty pro automatizaci nebo třeba výukové projekty vyžadují odlišné nástroje. Pokud teprve začínáte, sáhněte po něčem jednoduchém, kde vás prostředí nebude zahltí stovkami funkcí, které nevyužijete. Naopak při větších projektech oceníte pokročilé ladění, integraci s verzovacími systémy a nástroje pro refaktorování.
Většina začínajících vývojářů řeší stejný paradox: firmy chtějí zkušenosti, ale odkud je vzít, když vás nikdo nechce zaměstnat? Řešení neleží v neustálém posílání životopisů, ale v cíleném budování dovedností, které jsou na trhu žádané. Než začnete rozesílat přihlášky, zjistěte si, jaké technologie se ve vašem regionu skutečně používají. Projděte si inzeráty na pozice juniorů a všimněte si, které jazyky a frameworky se opakují. Tento průzkum vám ušetří měsíce učení něčeho, co nikdo nehledá.
Jak mockovat závislosti a ověřit dispatch Použijte knihovnu pro testování, jako je Jest, ale princip funguje stejně i v jiných prostředích. Vytvořte si fiktivní store pomocí redux-mock-store, který zaznamenává všechny dispatchované akce. Do thunku pak vložíte funkci, která místo API vrátí předem definovaný objekt. Po zavolání akce zkontrolujete, jestli se v seznamu akcí objevily ty, které očekáváte. Nezapomeňte na asynchronní povahu: počkejte na dokončení pomocí async/await nebo Promise.resolve, jinak test skončí dřív, než se akce stihnou odeslat.
Jednotkové testy reducerů a asynchronních akcí v Reduxu jsou základním kamenem robustní aplikace. Nemusíte kvůli nim spouštět celé integrační prostředí, stačí vám čistý JavaScript a pár nástrojů, které už pravděpodobně máte. Reducer je totiž čistá funkce a async akce lze testovat pomocí mockování závislostí. Tento přístup vám ušetří čas a zajistí, že logika aplikace je pokryta testy dřív, než se začnete zabývat komponentami.
Na závěr nezapomeňte testy pravidelně spouštět a sledovat, jak se chovají. NUnit integruje s CI nástroji, takže testy můžete automaticky pouštět při každém commitu. Pokud testy začnou selhávat, je důležité zjistit příčinu co nejdříve. Vždy čtěte výstup testů – obsahuje informace o tom, která očekávání nebyla splněna. Po napsání testů se zamyslete, zda nepokrývají všechny důležité scénáře, včetně okrajových případů, jako jsou prázdné vstupy, maximální hodnoty nebo výjimky. Dobré testy vám dají jistotu při úpravách kódu a výrazně zkrátí dobu hledání chyb.
Nakonec si uvědomte, že první práce vývojáře není o tom, že budete hned psát složité systémy. Bude to spousta učení, opravování chyb a čtení cizího kódu. Nebojte se požádat o zpětnou vazbu po každém pohovoru, ať už dopadl jakkoli. Využijte i možnost práce na zkoušku nebo stáže – i když je placená hůře, získané zkušenosti a kontakty vám otevřou dveře k lepším příležitostem. Trpělivost a soustavná práce se vyplatí, za pár měsíců si budete připadat jako jinde.
Dalším důležitým pravidlem je netestovat implementaci, ale chování. Nezáleží na tom, jak přesně thunk vypadá uvnitř, ale jaké akce vyvolá a v jakém pořadí. Proto se vyhněte kontrole, jestli byla volána nějaká konkrétní funkce kromě dispatch. Místo toho se zaměřte na to, co uživatel nebo další části aplikace skutečně vidí. Tento přístup vám umožní později změnit interní strukturu akce bez nutnosti přepisovat testy, pokud zůstane zachováno chování.
Základní dělení je mezi lehkými editory a plnohodnotnými IDE. Lehký editor, jako je třeba ten, který už máte v systému, se hodí na rychlé úpravy a menší soubory. Plnohodnotné IDE nabízí zvýrazňování syntaxe, automatické doplňování, debugger a správce závislostí. Než se rozhodnete, vyzkoušejte si, jak rychle se prostředí spouští, jak svižně reaguje na psaní a zda zvládá projekty, které plánujete vytvářet. Nic vás nenadchne, když budete čekat deset sekund na každou akci.