Když začínáš s testy v Pythonu, pytest ti ušetří hodiny
Malé funkce a jedna odpovědno
Největší chybou je poměr obrátit: mnoho e2e testů a málo jednotkových. Další je sdílený stav mezi testy. Test, který projde sám, ale selže v sadě, obvykle závisí na datech z předchozího běhu. Řešením je izolace a deterministická data. Pyramidu nevnímejte jako početní poměr, ale jako rozhodnutí, kde zaplatíte za rychlost a kde za věrnost.
Neurčitost není slabost, mlčení o rizicích ano Neurčitý odhad neznamená, že nemáte říct nic. Znamená, že k číslu přidáte podmínky. „Tři týdny, pokud se nezmění rozsah a pokud do dvou dnů dostanu přístupy" je konkrétnější než „tři týdny" a zároveň vás chrání. Vypište dvě až tři věci, které odhad mohou posunout, a dejte je klientovi písemně. Když se pak něco změní, nejednáte o výmluvu, ale o dříve pojmenované riziko.
Kde začátečníci nejčastěji klopýtnou První častá chyba je chybějící kontrola vstupu. Express sám o sobě nic nevaliduje, takže data z těla požadavku musí projít ověřením dřív, než se dostanou do databáze. Druhá chyba je ignorování asynchronních chyb: pokud v async handleru vyhodíte výjimku a nezavoláte next(err), požadavek zůstane viset a klient čeká do timeoutu. Řešením je obalovací funkce nebo knihovna, která výjimky předá dál. Třetí chyba je návratové kódy – vracet 200 i při neúspěchu mate klienty i monitorovací nástroje.
Praktický postup: nejdřív napište jednotkový test pro novou logiku, pak integrační pro hranici systému a e2e jen pro scénář, který by jinak nikdo neověřil. Sledujte dobu běhu. Pokud sada jednotkových testů trvá déle než několik sekund, něco děláte špatně. Pokud integrační ruční spuštění databáze, ztratí se v CI a přestanou se spouštět.
Nakonec si hlídejte slovník. Slova jako „určitě", „stoprocentně" nebo „do té doby to bude" znějí dobře, ale vytvářejí závazek, který nemůžete splnit. Nahraďte je slovy „předpokládám", „odhaduji", „pokud se nic nezmění". Není to slabost, je to přesnost. Klient, který slyší poctivý odhad s podmínkami, vám bude věřit i tehdy, když se termín posune. Klient, který slyšel slib, vám nebude věřit už nikdy.
Typická chyba je skrývat rezervu a tvářit se jako stroj. Klient pak nevidí, že máte prostor na neočekávané věci, a každé zpoždění bere jako selhání. Lepší je říct: „Můj odhad je deset dní, z toho dva dny jsou rezerva na věci, které teď nevidíme." Rezerva není lenost, je to nástroj, jak slib dodržet. Zároveň ji nepoužívejte jako omluvu pro práci, která se dá udělat hned.
Na vrcholu stojí end-to-end testy. Ověřují scénář z pohledu uživatele, ale jsou nejdražší na údržbu. Nemá smysl jimi pokrývat každou kombinaci vstupů. Vyberte kritické cesty: přihlášení, platba, uložení objednávky. Pokud e2e test padá kvůli změně textu v tlačítku, je příliš křehký a patří do nižší vrstvy. Stabilita je důležitější než pokrytí.
Testovací pyramida není dogma, ale nástroj na řízení rizika. Většina týmů skončí u opačného extrému: stovky jednotkových testů, které procházejí, a přesto se aplikace rozbije při prvním kliknutí. Problém nebývá v počtu testů, ale v tom, co který test skutečně ověřuje. Pyramidu je proto lepší brát jako poměr mezi rychlostí zpětné vazby a věrností produkčnímu prostředí.
Postavit REST API v Node.js jde dvěma cestami: použít vestavěný modul http, nebo sáhnout po Expressu. Rozdíl není v tom, co je „modernější", ale v tom, kolik práce chcete řešit ručně. Holý Node.js zvládne všechno, co Express umí, jenže za cenu vlastního kódu pro routování, parsování těla požadavku, hlaviček a zpracování chyb. Express tyto vrstvy dodává hotové a nechává prostor na logiku aplikace.
Fixtures místo kopírování přípravy Jakmile testů přibude, začne se opakovat příprava – vytvoření databáze, načtení konfigurace, přihlášení klienta. Řešením jsou fixtures. Dekorátor @pytest.fixture označí funkci, jejíž návratovou hodnotu lze předat jako argument do testu. pytest ji zavolá před testem a uklidí po něm, pokud definuješ i kód pro úklid přes yield. Fixture mohou mít různé rozsahy – function, module, session – a je snadné je omylem nastavit příliš vysoko a způsobit, že se stav mezi testy míchá. Drž se výchozího rozsahu function, dokud nemáš měřený důvod pro jiný.
U čistého Node.js narazíte na stejné problémy, jen dřív. Musíte ručně rozlišit metodu a cestu, načíst tělo po částech, ošetřit maximální velikost a sestavit odpověď včetně hlaviček. Výhodou je menší závislost a jasná představa o tom, co se v aplikaci děje. Nevýhodou je, že každý nový endpoint znamená další kód, který se snadno zvrhne v nepořádek. Express tuto režii odstraňuje a drží strukturu čitelnou i při desítkách tras.