Když se kód čte jako věta, chyby mizí samy
Jak otestovat thunk akce a vyhnout se častým chybám Pro testování async akcí, které používají thunk, potřebujete vytvořit mock pro API volání nebo jinou závislost. Můžete použít funkci, která vrací Promise, a tu pak nahradit ve vašem testu. Například předpokládejme, že akce načítá uživatele. V testu vytvoříte mock, který vyřeší data, a zavoláte thunk s parametry (dispatch, getState). Poté zkontrolujete, jaké akce byly dispatchnuty. Důležité je nezapomenout na volání done nebo použít async/await, protože thunk vrací Promise. Častým problémem je, že zapomenete na to, že thunk může mít vedlejší efekty, které ovlivňují pořadí akcí.
Jednotkové testy jsou vaším každodenním nástrojem pro rychlou zpětnou vazbu. Testují jednu třídu, jednu funkci, jeden algoritmus. Jsou stabilní, běží v milisekundách a přesně řeknou, kde se něco rozbilo. Jejich slabinou je, že neodhalí problémy v integraci – špatně nastavenou konfiguraci, chybějící validaci dat mezi službami nebo neočekávané pořadí volání. Pokud je jediným typem testů ve vašem projektu, začnete časem potřebovat bezpečnostní síť na vyšší úrovni.
Ovládání jazyka C# začíná u konzolové aplikace. Nevyžaduje grafické rozhraní, databáze ani webový server. Stačí soubor s kódem, překladač a příkazový řádek. První program tak může vzniknout během pár minut, pokud víte, kde hledat chyby. V tomto návodu si projdeme tvorbu jednoduché aplikace, která čte vstup od uživatele a vypíše odpověď. Cílem je, abyste pochopili základní strukturu projektu a vyhnuli se začátečnickým nástrahám.
Typickou chybou je šetřit řádky na úkor srozumitelnosti. Zkrácené názvy proměnných jako u, d nebo arr jsou zdrojem zmatku. Stejně tak vnořené ternární operátory, které vypadají chytře, ale při první změně požadavků se stávají noční můrou. Pište podmínky jako if a else, i když to znamená pět řádků navíc. Vždy pamatujte, že kód se čte desetkrát častěji, než se píše. Proto investujte do jasných jmen a krátkých funkcí, které se vejdou na obrazovku bez nutnosti scrollování.
Když přichází na řadu export, většina problémů vzniká zbytečně. B3du umožňuje exportovat v mnoha formátech, ale ne všechny jsou vhodné pro každý účel. Pokud chcete video sdílet online, zvolte standardní formát, který je kompatibilní s většinou přehrávačů. Pokud ho chcete dál upravovat v jiném programu, vyberte bezztrátový kodek. Zde platí jednoduché pravidlo: méně komprese na začátku znamená více kvality na konci. A když si nejste jistí, vyzkoušejte export na krátkém úseku — uvidíte, jak se výsledek chová, a nebudete muset čekat hodiny.
Další pastí je testování chybových stavů. Vždy testujte i scénář, kdy API volání selže. Vytvořte mock, který vyhodí chybu, a ověřte, že je dispatchnuta akce pro chybu. Také si dejte pozor na to, abyste nemuseli používat reálné časové prodlevy. Pokud používáte setTimeout, nahraďte ho falešnými hodinami, které test runner poskytuje. Tím se testy stanou deterministické a rychlé. Nezapomeňte také na to, že getState by mělo vracet vždy stejný stav, pokud ho v testu používáte, jinak se snadno stane, že testy začnou být náhodné.
Nezapomínejte ani na chování při chybách. Čistý kód neznamená jen to, že funguje za ideálních podmínek, ale také že selhává srozumitelně. Vyhněte se prázdným catch blokům, které chybu polknou a nechají aplikaci v nekonzistentním stavu. Místo toho chybu zalogujte s kontextem a buď ji zpracujte, nebo nechte program spadnout, ale vždy s jasnou zprávou. Pomůže to při hledání příčiny v produkci a zabrání to tichému poškození dat, které se projeví až za týden.
Prakticky doporučuji rozdělit testy do dvou vrstev podle rychlosti. Jednotkové testy spouštějte při každé změně kódu, měly by běžet pod deset sekund. Integrační testy zařaďte do samostatné fáze – ideálně při pushnutí do sdíleného repozitáře nebo v nočním běhu. Tím zajistíte, že vývojáři mají rychlou zpětnou vazbu při psaní kódu, ale zároveň se před nasazením ověří kritické scénáře. Důležité je, aby integrační testy byly deterministické – měly by běžet proti izolovanému prostředí, které je před každým během znovu vytvořeno.
Růst codebase s sebou přináší nejen nové funkce, ale i rostoucí tlak na testovací strategii. Zpočátku vám stačí rychlé jednotkové testy, které ověřují izolované metody. Jakmile ale začnete měnit rozhraní mezi moduly, zjistíte, že vám unikají chyby, které se projeví až při propojení komponent. Klíčem není držet se dogmatického poměru 70:30, ale umět rozpoznat, kdy který typ testu přináší nejvyšší hodnotu za rozumné náklady.