Redux a asynchronní akce: jak zjednodušit stav

Aus MeinWiki
Wechseln zu: Navigation, Suche


Async akce (např. s Redux Thunk) testujete podobně, ale potřebujete mockovat API volání a dispatch. Místo reálného HTTP použijte stub funkce, která vrací předem definovaná data. V testu pak zavoláte thunk s argumenty (dispatch, getState) a ověříte, že dispatch byl zavolán s očekávanými akcemi. Typický vzor: vytvořte si pomocnou funkci, která vrací dispatch spy (např. pomocí jest.fn()) a getState, který vrací testovací stav. Tím izolujete async logiku od prostředí a testy jsou rychlé.

jak zařídit malou kuchyni na to – praktický postup Začněte s jednoduchým příkladem: thunk, který načte data a dispatchnuje success akci. V testu vytvořte mockovanou API funkci, která vrací Promise s daty. Poté zavolejte thunk s dispatch a getState. Ověřte, že dispatch byl volán s loading akcí na začátku a success akcí na konci. Nezapomeňte otestovat i chybový scénář – mock API by měl vracet rejection a ověřit, že dispatch obdrží error akci. Toto pokryje hlavní větve.
Práce s asynchronními akcemi v Reduxu často vede k zahlcení stavu zbytečnými metadaty. Typický problém? Každý request si nese vlastní vlajky loading, error a data. Když jich máte v aplikaci deset, stav se stává nepřehledným a údržba peklem. Místo abyste pro každou akci vytvářeli nový slice, zkuste stav navrhnout jako jednu strukturu, která reprezentuje aktuální fázi požadavku. Například místo tří booleanů použijte jediný stavový automat: idle, loading, success, error.

Při psaní testů se nevyhnete situaci, kdy potřebujete otestovat chyby – tedy že funkce vyhodí výjimku. K tomu slouží pytest.raises. Například with pytest.raises(ValueError): deleni(1, 0). Důležité je, aby test byl úzce zaměřený – netestujte více věcí najednou, ale jeden aspekt. Pokud máte funkci, která vrací více hodnot, rozdělte test na více menších, abyste rychle zjistili, co se pokazilo. Když test selže, pytest ukáže přesný řádek s assertem, takže snadno najdete příčinu.

Dalším úskalím je používání print pro ladění uvnitř testů – pytest to sice zobrazí, ale pokud test selže, může to zahlcovat výstup. Místo toho se vyplatí používat přímo assert s popisem chyby, třeba assert vystup == ocekavano, "Výstup nesouhlasí". Také se vyhněte testování vnitřních implementací – testujte veřejné chování. Pokud testujete třídu, nezkoumejte její privátní atributy, ale spíše byt v panelákuýsledky jejích metod. Tím zajistíte, že testy nebudou křehké při změnách vnitřní struktury.

Pět praktických otázek před výběrem Než se rozhodnete, položte si pět otázek. Za prvé: potřebujete ukládat data, která nemají pevnou strukturu? Například uživatelské profily, kde každý může mít jiná pole. V takovém případě se dokumentová databáze hodí, protože nevyžaduje předem definované schéma. Za druhé: jaká je velikost dat? Pokud počítáte s miliony záznamů denně, klasická SQL databáze narazí na limity škálování. NoSQL zvládne distribuci přes více uzlů. Za třetí: jaké dotazy budete provádět? Pokud potřebujete složité joiny a transakce s vysokou konzistencí, raději zůstaňte u SQL. Za čtvrté: jaká je očekávaná dostupnost? NoSQL systémy často obětují konzistenci ve prospěch dostupnosti – to se hodí pro aplikace, kde je důležitější, aby systém běžel, než aby data byla v každém okamžiku úplně aktuální. Za páté: jaké máte zkušenosti v týmu? Přechod nábytek na míru NoSQL vyžaduje nové dovednosti a jiný způsob myšlení, což může zpomalit vývoj.

Jeden zdroj pravdy pro každý požadavek Klíčem je redukovat počet stavových proměnných. Pokud máte tři různé endpointy, nepotřebujete tři samostatné objekty s loading a error. Vytvořte si generický slice, který přijímá typ akce a ukládá data do mapy. Například stav ve tvaru byId: {}, loadingIds: [], errorIds: [] umožňuje sledovat, které položky se načítají, které selhaly a které už mají data. Tím se vyhnete duplicitnímu kódu a usnadníte si testování.

Nejdřív si ujasněme, co NoSQL znamená. Jde o rodinu databází, které se odklánějí od klasického relačního modelu s tabulkami, řádky a striktním schématem. Místo toho používají různé datové modely – dokumenty, klíče a hodnoty, sloupce nebo grafy. Typickým rysem je horizontální škálování, tedy přidávání dalších serverů místo posilování jednoho výkonného stroje. To znamená, že NoSQL databáze umějí obsloužit obrovské objemy dat, ale často za cenu slabší konzistence nebo složitějších dotazů.

V praxi se vyplatí sledovat i trend pokrytí v čase, nejen aktuální hodnotu. Pokud pokrytí roste, ale počet bugů neklesá, je něco špatně. Možná testujete špatné věci, nebo máte testy, které jsou závislé na datech a neodhalují skutečné problémy. V takovém případě je lepší investovat čas do revize testů a odstranění těch, které nepřinášejí hodnotu, než zvyšovat číslo. Někdy je totiž lepší mít 70% pokrytí s kvalitními testy než 90% pokrytí s hromadou bezcenných testů, které jen zpomalují build a zvyšují náklady na údržbu.

When you loved this informative article and you want to receive more info concerning https://literatur.Michaelmittag.ch/index.php?title=Zásady_psaní_čistého_kódu_v_JavaScriptu_pro_začátečníky_i_pokročilé generously visit our own web site.