Svět JavaScriptu nabízí spoustu možností pro… no, v podstatě pro všechno. Dnes se zaměříme na testovací nástroje a odpovíme na otázku „Jaký je nejlepší framework pro JavaScript?“
Projdeme si pět nejpopulárnějších frameworků pro testování v JavaScriptu a na konci článku zvolíme ten, který je podle nás nejlepší. Začněme.
Co jsou testovací frameworky?
Než se ponoříme do našeho seznamu frameworků, je důležité pochopit, co je to testovací framework.
Jednoduše řečeno, testovací framework je nástroj – nebo sada nástrojů – který vám pomáhá provádět jednotkové testování. Framework pro testování by vám měl poskytnout alespoň
- Pravidla nebo konvence pro psaní testovacích případů a jejich uspořádání do sad testů.
- Prostředky pro automatické provádění a vlastní hodnocení testů.
- Výsledky testů, které se zobrazují a formátují.
Pět frameworků pro testování v JavaScriptu, které stojí za to vyzkoušet
Teď už byste měli mít jasno v tom, co jsou to testovací frameworky a proč je potřebujeme. Když to máme za sebou, je čas pustit se do našeho seznamu nástrojů, počínaje Mocha.
Mocha
Mocha, někdy také nazývaný MochaJS, je testovací framework, který běží jak v Node.js, tak v prohlížeči. Byl vydán již v roce 2011 a od té doby je jedním z nejoblíbenějších testovacích frameworků ve světě JavaScriptu. Podle zprávy State of JavaScript však popularita frameworku Mocha v posledních letech klesá, i když je stále pravděpodobně nejpoužívanějším a nejznámějším z nástrojů.
Tento framework zjednodušuje asynchronní testování tím, že testy spouští sériově. To umožňuje přesné hlášení a zároveň mapování nezachycených výjimek na správné testovací případy. Framework Mocha má mimořádně flexibilní konfiguraci. Umožňuje vám spárovat jej s knihovnami, které potřebujete zejména pro funkce, jako jsou aserce, mocking a podobně.
Nevýhodou takové flexibility je, že Mocha vyžaduje více práce pro své počáteční nastavení. Také zatímco jiné frameworky již přicházejí s funkcemi assertions a mocking, Mocha k tomu vyžaduje další nástroje.
Oficiální stránky: mochajs.org
Úložiště: github.com/mochajs/mocha
Puppeteer
Puppeteer je knihovna Node.js, která umožňuje uživatelům ovládat prohlížeč Chrome nebo Chromium bez hlavy. Tímto způsobem je možné automatizovat testy, které byste obvykle prováděli ručně pomocí běžného prohlížeče. Na stránce projektu je uvedeno několik příkladů testů, které můžete provádět:
- Generování snímků obrazovky a PDF stránek.
- Procházení SPA (single-page application) a generování předrenderovaného obsahu (tj. „SSR“ ).
- Automatizace odesílání formulářů, testování uživatelského rozhraní, zadávání z klávesnice atd.
- Vytvoření aktuálního automatizovaného testovacího prostředí. Spouštějte testy přímo v nejnovější verzi prohlížeče Chrome s využitím nejnovějších funkcí JavaScriptu a prohlížeče.
- Zachyťte časovou stopu webu, která vám pomůže diagnostikovat problémy s výkonem.
- Testujte rozšíření Chrome.
- Testim vydal bezplatný záznamník pro Puppeteer. Vyzkoušejte ho a používejte ho tak často, jak chcete.
Oficiální stránky: developers.google.com/web/tools/puppeteer
Úložiště: github.com/puppeteer/puppeteer
Jasmine
Jasmine je testovací framework BDD (behavior-driven development) pro JavaScript.
Tento framework již obsahuje téměř vše, co potřebujete k zahájení testování. Má vestavěné aserce a testovací dvojníky se špiony, na rozdíl například od Mochy, která pro tyto funkce vyžaduje instalaci nástrojů třetích stran.
Jasmine je však také flexibilní a dokáže se bezproblémově integrovat s velkým množstvím dalších testovacích nástrojů. Snadno můžete použít Karmu jako test runner nebo využít Sinon.JS pro potřeby mockingu.
Oficiální stránka: jasmine.github.io/
Repositář: github.com/jasmine/jasmine
QUnit
QUnit byl původně součástí programovací knihovny jQuery. John Resig ji vytvořil pro testování aplikací jQuery, jQuery UI a jQuery Mobile. V roce 2008 byl QUnit vyčleněn z kódové základny jQuery a vydán jako samostatný framework, který by však ke své činnosti stále vyžadoval jQuery. V roce 2009 to napravili přepsáním, čímž se QUnit konečně stal nezávislým na jQuery.
Přestože byl původně zaměřen na jQuery, QUnit je v současnosti obecný framework, který může testovat jakýkoli kód JavaScriptu a podporuje prostředí na straně klienta i serveru.
O QUnit byste mohli uvažovat jako o zástupci JavaScriptu v rodině frameworků pro unit testing xUnit. Má rychlé a snadné nastavení. Protože je na trhu již nejméně 12 let, jedná se také o dobře podporovaný nástroj.
Oficiální stránky: qunitjs.com
Úložiště: github.com/qunitjs/qunit
Jest
Jest je testovací framework pro JavaScript, který se zaměřuje na jednoduchost. Byl vydán společností Facebook a jeho cílem je, aby fungoval hned po vybalení z krabice a bez nutnosti konfigurace.
Pokud se podíváte na stránku Jest „getting started“, zjistíte, že jej můžete nainstalovat, napsat svůj první test a spustit během několika minut, bez složitého nastavování nebo dalších instalací. Další výhodou Jestu je jeho působivý výkon.
Jest se primárně používá k testování aplikací React, ale to neznamená, že jste omezeni na používání pouze k testování aplikací napsaných pomocí tohoto frameworku. Naopak: můžete jej použít i k testování aplikací Node, Angular a Vue, abychom jmenovali alespoň některé.
Oficiální stránka: jestjs.io/
Repositář: github.com/facebook/jest
Značné absence
Možná se divíte, proč se do našeho seznamu nedostaly některé známé nástroje pro testování JavaScriptu. Možná máte pocit, že nástroje jako Karma, Sinon a Chai jsou mimo jiné dostatečně populární na to, aby v seznamu byly. Proč jsme je nezařadili?
Prostě jsme chtěli, aby byl seznam co nejstručnější. Abychom toho dosáhli, rozhodli jsme se nezařadit do seznamu testovací nástroje, které nejsou, přísně vzato, frameworky. To je tedy důvod, proč se do seznamu nedostal superpopulární nástroj, jako je Karma: je to test runner, nikoli framework. Stejná úvaha platí i pro Sinon (nástroj pro mocking) a Chai (knihovna pro assertiony).
Můžete namítnout, že Puppeteer do seznamu tak docela nezapadá, a do jisté míry s tím souhlasím. Totiž všechny ostatní nástroje jsou frameworky vhodné spíše k provádění testů ve stylu unit testů, zatímco Puppeteer je spíše nástroj pro automatizaci prohlížeče. Stále se však jedná o testovací framework v tom smyslu, že umožňuje navrhovat automatizované testy, které jsou později spuštěny bez zásahu člověka.
Verdict:
Představili jsme pět testovacích frameworků pro JavaScript. Nyní je čas splnit slib z nadpisu příspěvku a vybrat ten nejlepší. Abychom toho dosáhli, budeme frameworky hodnotit podle čtyř kritérií: cena, instalace, snadnost nastavení a křivka učení.
Hodnocení frameworků
Cena
První kritérium je pro nás jistě nejjednodušší. Všechny frameworky, kterými jsme se zde zabývali, jsou open-source projekty, takže si je můžete stáhnout a používat zdarma (jako u piva). Takže zde nemáme jasného vítěze. Pojďme tedy dál.
Instalace
Instalace všech výše uvedených nástrojů je poměrně snadná. Koneckonců je všechny můžete nainstalovat pomocí npm (nebo alternativně Yarn.) Některé z nástrojů však nabízejí další možnosti instalace.
Například QUnit můžete kromě npm a Yarn nainstalovat jako samostatný soubor ke stažení. To by však vyžadovalo uložení a správu tohoto prostředku. Místo toho můžete použít verzi hostovanou v CDN jQuery. Jasmine také nabízí samostatnou verzi, která není závislá na Node a umožňuje spouštět specifikace pomocí prohlížeče.
Takže, máme tu vítěze? Myslíme si, že ano. Kdybychom vybírali pouze na základě snadnosti instalace, měli bychom další remízu. Ale jak jsme viděli, QUnit i Jasmine nabízejí více možností, protože je můžete používat jako samostatné knihovny. Je tato dodatečná flexibilita užitečná? Váš názor se může lišit, ale pro nás zde vítězí QUnit a Jasmine.
Vítězové: QUnit a Jasmine
Snadnost nastavení
Nyní se podíváme na snadnost nastavení. Pokud jde o počáteční nastavení, máme zde jasného vítěze: Jest. Framework slibuje nulové použití konfigurace a tento slib plní. Jistě, umožňuje provádět volitelné konfigurace, ale je opravdu úžasné nainstalovat testovací framework a mít spuštěný skutečný test zhruba za dvě minuty, bez jakékoliv konfigurace nebo instalace dalších nástrojů.
Vítěz: Jest
Křivka učení
Nakonec křivka učení. Zde musíme opět zvolit Jest. Jelikož přichází s širokým API a nevyžaduje tolik nástrojů třetích stran jako ostatní frameworky, Jest nevyhnutelně představuje méně strmou křivku učení.
Vítěz:
Tady je vítěz
Poté, co jsme se zabývali pěti frameworky pro testování JavaScriptu a analyzovali je podle čtyř kritérií, je čas vybrat vítěze.
Jelikož tedy zvítězil ve dvou ze čtyř kritérií, která jsme použili, vybereme Jest jako našeho vítěze. To neznamená, že byste neměli vyzkoušet ostatní nástroje. Naopak: experimentujte a cvičte co nejvíce, protože to je nejlepší způsob, jak se učit.