Než napíšeš další test, ověř si reducery bez integračního prostředí
Začněte jednou službou, ne celým procesem Nejčastější chyba je pokusit se zautomatizovat všechno najednou. Místo toho si vyberte jednu malou aplikaci, která se nasazuje často, a proveďte ji celým řetězcem: sestavení, test, nasazení, monitoring. K tomu použijte skripty, které zvládnete spustit lokálně, a teprve pak je přeneste do CI. Cílem není dokonalá pipeline, ale rychlá zpětná vazba — pokud něco spadne, musíte to vědět do deseti minut.
def zakaznik():
Praktické pravidlo: analytickou fázi odhadujte na 20–30 % celkového času u složitějších úkolů, u jednoduchých změn stačí 10–15 %. Implementace pak zabere obvykle 50–60 % a zbytek připadá na testování a opravy. Tyto proporce ale nejsou dogma. Pokud zadání není jasné, je lepší analýzu natáhnout a implementaci odložit, než spěchat do kódu a pak vše předělávat. Typická chyba je odhadovat analýzu jako „půl dne na pročtení zadání" a zapomenout na rozhovory s uživatelem nebo na mapování závislostí.
Kdy se vyplatí odhadnout více času na analýzu a kdy naopak méně? Více času na analýzu si vyhraďte, když pracujete s neznámou doménou, se starším kódem bez dokumentace nebo když se řešení dotýká více systémů. Méně času naopak potřebujete u rutinních změn, které už tým dělal mockrát a zná všechna úskalí. V agilním prostředí se vyplatí pracovat v krátkých iteracích a odhady průběžně upřesňovat. Pokud po první sprintu zjistíte, že analýza trvá o 30 % déle, než jste čekali, neberte to jako selhání, ale jako podnět k úpravě budoucích odhadů.
Když už máte první službu v CI, zaměřte se na měření. Klíčové metriky nejsou počet nasazení za den, ale doba od nápadu po produkci a frekvence selhání. Zapisujte si čísla do tabulky, ale neanalyzujte je každý den — stačí týdenní revize. Pokud vidíte, že jsou nasazení častější, ale výpadky se nemění, děláte to dobře. Když se ale výpadky začnou množit, přibrzděte a přidejte víc testů, ne další automatizace.
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í.
Druhým častým problémem je špatné používání HTTP stavových kódů. Mnoho vývojářů vrací při validační chybě kód 200 s chybovou hláškou v těle odpovědi. To je matoucí a porušuje to základy HTTP protokolu. Pro chybějící parametr použijte 400, pro neautorizovaný přístup 401 a pro zakázanou akci 403. Teprve když klient vidí správný stavový kód, může na chybu adekvátně reagovat. Navíc si snadno nastavíte logger, který zaznamená všechny 4xx a 5xx odpovědi pro pozdější analýzu.
Nakonec si pamatujte, že DevOps je o lidech víc než o technice. Pokud váš tým nechce měnit zaběhnuté postupy, žádná technologie to nespasí. Začněte tím, že si s kolegy sednete a sepíšete si, co je nejvíc bolí. Z toho jednoho bodu pak postavte experiment — a nejlépe nechte mluvit výsledky, ne názory. Jakmile uvidíte, že se nasazení zrychlilo a chyby klesají, zbytek týmu se přidá sám.
Nakonec si pamatujte, že odhad není závazek, ale pouze nejlepší možný tip. V agilním týmu se odhady používají pro plánování a prioritu, nikoli jako měřítko výkonu jednotlivců. Pokud budete tým neustále tlačit k tomu, aby odhady plnil na minutu, začnou si dávat umělé rezervy a spolupráce se zhorší. Místo toho se zaměřte na to, proč se odhad liší od skutečnosti, a zlepšujte svůj proces. Jen tak se dostanete k odhadům, kterým můžete věřit.
Testování reducerů a async akcí nemusí znamenat stavět celé integrační prostředí. Redux sám o sobě je čistá knihovna, která nezávisí na DOMu ani na serveru. Pokud se omezíte na jednotkové testy, získáte rychlost i stabilitu. Stačí k tomu test runner, jako je Vitest nebo Jest, a pár pomocných funkcí. Reducer je obyčejná funkce, takže ho zavoláte s aktuálním stavem a akcí a porovnáte výsledek. Async akce, které používají thunk middleware, testujete podobně – mockujete závislosti a kontrolujete dispatchnuté akce.
Odhad časové náročnosti analytických fází a implementace patří v agilních týmech k nejvíc podceňovaným dovednostem. Nejde o to, abyste trefili přesný počet hodin, ale abyste vytvořili realistický rámec, který tým zvládne bez zbytečného přetížení. Základní chybou bývá, že se odhaduje pouze kód, zatímco analýza, revize a případné změny se zapomínají. Přitom právě analýza často rozhoduje o tom, jestli implementace proběhne hladce, nebo se utopí v množství doplňujících otázek.