Srovnání s jinými testovacími nástroji
Jest
Jest si vydobyl dominantní postavení mezi testovacími frameworky díky vestavěné podpoře pro většinu JavaScriptových projektů, uživatelsky přívětivému API (it
a expect
) a komplexní sadě testovacích funkcí, které většina nastavení vyžaduje (snímky, mocky, pokrytí kódu). Jsme vděční týmu a komunitě Jest za vytvoření příjemného testovacího API a za prosazení mnoha testovacích vzorů, které jsou nyní standardem ve webovém ekosystému.
Je možné používat Jest v prostředí Vite. @sodatea vytvořil vite-jest, jehož cílem je poskytnout prvotřídní integraci Vite pro Jest. Poslední překážky v Jestu byly odstraněny, což z něj činí vhodnou možnost pro vaše unit testy.
Nicméně ve světě, kde Vite poskytuje podporu pro nejběžnější webové nástroje (TypeScript, JSX, nejoblíbenější UI frameworky), představuje Jest zdvojení složitosti. Pokud je vaše aplikace poháněna Vite, mít dva různé procesy pro konfiguraci a údržbu není optimální. S Vitestem můžete definovat konfiguraci pro vaše vývojové, buildovací a testovací prostředí jako jedinou pipeline, která sdílí stejné pluginy a stejný soubor vite.config.js
.
I když vaše knihovna nepoužívá Vite (například pokud je postavena s esbuild nebo Rollup), Vitest je zajímavou možností, protože vám poskytuje rychlejší spuštění unit testů a výrazné zlepšení vývojářského zážitku (DX) díky výchozímu režimu sledování (watch mode) využívajícímu okamžité obnovování modulů za běhu (HMR) od Vite. Vitest nabízí kompatibilitu s většinou Jest API a knihoven ekosystému, takže ve většině projektů by měl být přímou náhradou za Jest.
Cypress
Cypress je testovací nástroj založený na prohlížeči a doplňkový nástroj k Vitestu. Pokud byste chtěli používat Cypress, doporučujeme používat Vitest pro veškerou logiku bez grafického rozhraní (headless) ve vaší aplikaci a Cypress pro veškerou logiku založenou na prohlížeči.
Cypress je známý jako nástroj pro end-to-end testování, ale jejich nový nástroj pro testování komponent má skvělou podporu pro testování Vite komponent a je ideální volbou pro testování čehokoli, co se vykresluje v prohlížeči.
Testovací nástroje založené na prohlížeči, jako jsou Cypress, WebdriverIO a Web Test Runner, dokáží zachytit problémy, které Vitest nemůže, protože používají skutečný prohlížeč a skutečná API prohlížeče.
Testovací ovladač Cypressu se zaměřuje na zjišťování, zda jsou prvky viditelné, přístupné a interaktivní. Cypress je účelově navržen pro vývoj a testování UI a jeho DX je zaměřen na testování vašich vizuálních komponent. Vidíte svou komponentu vykreslenou vedle testovacího reportéru. Jakmile je test dokončen, komponenta zůstává interaktivní a můžete ladit jakékoli chyby, které se vyskytnou, pomocí vývojářských nástrojů prohlížeče.
Naproti tomu Vitest se zaměřuje na poskytování nejlepšího možného DX pro bleskově rychlé, headless testování. Nástroje založené na Node.js, jako je Vitest, podporují různá částečně implementovaná prostředí prohlížeče, jako je jsdom
, která implementují dostatek funkcí pro rychlé unit testování jakéhokoli kódu, který odkazuje na API prohlížeče. Kompromisem je, že tato prostředí prohlížeče mají omezení v tom, co mohou implementovat. Například jsdom postrádá řadu funkcí, jako je window.navigation
nebo vykreslovací engine (offsetTop
atd.).
A konečně, na rozdíl od Web Test Runneru, testovací nástroj Cypress je spíše vývojové prostředí (IDE) než pouhý testovací nástroj, protože v prohlížeči vidíte i skutečnou vykreslenou komponentu, spolu s výsledky testů a logy.
Cypress také integruje Vite do svých produktů: přestavuje UI své aplikace pomocí Vitesse a používá Vite k testování vývoje svých projektů.
Věříme, že Cypress není dobrou volbou pro unit testování headless kódu, ale že použití Cypressu (pro E2E a testování komponent) a Vitestu (pro unit testy) by pokrylo testovací potřeby vaší aplikace.
WebdriverIO
WebdriverIO je, podobně jako Cypress, alternativní testovací nástroj založený na prohlížeči a doplňkový nástroj k Vitestu. Může být použit jako nástroj pro end-to-end testování i pro testování webových komponent. Dokonce vnitřně používá komponenty Vitestu, např. pro mocking a stubbing v rámci testů komponent.
WebdriverIO nabízí stejné výhody jako Cypress, což vám umožňuje testovat vaši logiku ve skutečném prohlížeči. Používá však skutečné webové standardy pro automatizaci, což překonává některé kompromisy a omezení při spouštění testů v Cypressu. Dále vám umožňuje spouštět testy i na mobilních zařízeních, což vám dává přístup k testování vaší aplikace v ještě více prostředích.
Web Test Runner
@web/test-runner spouští testy uvnitř headless prohlížeče, čímž poskytuje stejné prostředí pro spouštění jako vaše webová aplikace bez nutnosti napodobování API prohlížeče nebo DOM. To také umožňuje ladění uvnitř skutečného prohlížeče pomocí vývojářských nástrojů, ačkoli není zobrazeno žádné UI pro procházení testu krok za krokem, jako je tomu u testů v Cypressu.
Pro použití @web/test-runner v projektu Vite použijte @remcovaes/web-test-runner-vite-plugin. @web/test-runner neobsahuje knihovny pro aserce nebo mocking, takže je na vás, abyste je přidali.
uvu
uvu je testovací nástroj pro Node.js a prohlížeč. Spouští testy v jednom vlákně, což znamená, že testy nejsou izolovány a mohou unikat mezi soubory. Vitest však používá worker vlákna k izolaci testů a jejich paralelnímu spouštění.
Pro transformaci vašeho kódu se uvu spoléhá na require
a loader hooky. Vitest používá Vite, takže soubory jsou transformovány s plnou silou pluginového systému Vite. Ve světě, kde Vite poskytuje podporu pro nejběžnější webové nástroje (TypeScript, JSX, nejoblíbenější UI frameworky), představuje uvu duplikaci složitosti. Pokud je vaše aplikace poháněna Vite, mít dvě různé pipeline pro konfiguraci a údržbu není optimální. S Vitestem můžete definovat konfiguraci pro vaše vývojové, buildovací a testovací prostředí jako jedinou pipeline, která sdílí stejné pluginy a stejnou konfiguraci.
uvu neposkytuje inteligentní režim sledování (watch mode) pro opětovné spuštění změněných testů, zatímco Vitest vám poskytuje úžasný DX díky výchozímu režimu sledování (watch mode) využívajícímu okamžité Hot Module Reload (HMR) od Vite.
uvu je rychlá možnost pro spouštění jednoduchých testů, ale Vitest může být rychlejší a spolehlivější pro složitější testy a projekty.