Úvod do testování jednotek v JavaScriptu a jeho rámců a nástrojů.
Vývoj webových aplikací se v posledních letech dramaticky proměnil. Svět se odklání od tradičních programovacích jazyků, jako je Java, .NET a PHP, a stále více se přiklání k JavaScriptu. Důvodem je jeho snadné použití jak na frontendu, tak na backendu, a také možnost rychlého vytváření prototypů.
S tímto posunem se objevuje i potřeba kvalitních testovacích nástrojů. Tento článek vám představí některé z nejlepších nástrojů pro testování jednotek v JavaScriptu, které se v tomto odvětví používají.
Proč je testování jednotek důležité?
Než se zaměříme na dostupné nástroje a jejich výhody, je důležité pochopit, proč je testování jednotek tak klíčové.
Testování jednotek (unit testing) je proces ověřování kódu na úrovni jednotlivých modulů. Umožňuje vám zajistit, že vámi vytvořené moduly splňují požadavky stanovené v zadání. Tyto testy se píší pro každý modul ihned po jeho vytvoření. Po každém novém modulu se spouští celá sada testů, aby se ověřilo, že nový modul nemá negativní vliv na stávající.
Vývoj v JavaScriptu může být chaotický, pokud se nedodržují správné postupy. Proto je důležité používat vhodné nástroje pro vývoj a testování jednotek. Testy pro frontend v JavaScriptu se obvykle spouštějí v reálných nebo bezhlavých prohlížečích.
Tyto testy se zaměřují na testování použitelnosti a odezvy aplikace. Rámce pro testování jednotek backendu se naopak soustředí na testování obchodní logiky a koncových bodů služeb pro kód založený na NodeJS.
MochaJS
MochaJS je velmi oblíbený testovací rámec, který podporuje testování jak backendu, tak frontendu. MochaJS je flexibilní základ, na kterém si můžete vyvíjet testy podle svých potřeb. Testy spouští asynchronně v enginu Chrome v8 nebo v jakémkoli jiném prohlížeči.
Mezi hlavní výhody MochaJS patří:
- Podpora frontendu i backendu
- Podpora debuggeru NodeJS
- Poskytuje čistý základ pro vývoj testů dle preferencí vývojáře
- Podpora všech prohlížečů, včetně headless Chrome
- Podpora mockování objektů pro flexibilní testování backendu
Jasmine
Jasmine je framework, který simuluje chování uživatele a umožňuje vám provádět testy, které napodobují interakci uživatele s webem. Je užitečný pro testování viditelnosti, srozumitelnosti kliknutí a odezvy uživatelského rozhraní v různých rozlišeních. Jasmine umožňuje automatizovat chování uživatele s vlastními zpožděními a čekacími dobami, aby se co nejvíce přiblížil skutečnému uživatelskému chování.
Mezi hlavní výhody používání Jasmine patří:
- Nízká režie díky minimálním externím závislostem
- Obsahuje téměř všechny potřebné nástroje ihned po instalaci
- Podporuje testování frontendu i backendu
- Kód se píše velmi podobně jako přirozený jazyk
- Obsáhlá dokumentace pro použití s různými frameworky
Podívejte se na skvělý online kurz testování jednotek s Jasmine.
AVA
AVA je minimalistický a odlehčený testovací rámec, který využívá asynchronní povahu JavaScriptu. AVA dokáže spouštět testy paralelně.
Dává vám téměř úplnou kontrolu nad tím, co děláte. Primárně se zaměřuje na spouštění testů pro kód založený na NodeJS. Mezi jeho výhody patří:
- Rychlost díky nízké náročnosti
- Asynchronní a paralelní spouštění testů
- Rychlejší než většina ostatních testovacích rámců
- Jednodušší syntaxe pro testování v JavaScriptu
- Přehlednější trasování zásobníku chyb
Jest
Jest je jedním z nejoblíbenějších frameworků, který pravidelně udržuje společnost Facebook. Je preferovanou volbou pro aplikace založené na Reactu, protože nevyžaduje žádnou konfiguraci.
Není však omezen pouze na React. Mezi vlastnosti JEST patří:
- Jediný rámec vhodný pro NodeJS, VueJS, React, Angular a další projekty založené na Babelu
- Snadné začlenění do projektu
- Dobrá dokumentace a standardní syntaxe pro kódování
- Umožňuje spravovat testy větších objektů díky živým snímkům
Karma
Karma je produktivní testovací prostředí, které podporuje většinu oblíbených testovacích rámců. Poskytuje podporu pro spouštění testů v různých prostředích. Má širokou podporu pro provádění testů na různých zařízeních a v různých aplikacích.
Hlavním důvodem pro výběr Karmy je její integrace s CI/CD systémy a následující funkce:
- Možnost spouštět testy v prohlížečích, v bezhlavých prostředích, jako je PhantomJS, i na zařízeních
- Podporuje testy napsané ve většině oblíbených frameworků
- Umožňuje spouštět testy na vzdálených zařízeních pomocí jednoduchého souboru
- Podpora ladění testovacích případů pomocí Chrome a Webstormu
Tape
Tape je architekturou velmi podobný AVA. Nepodporuje globální proměnné, takže je nutné Tape zahrnout do každého testovacího souboru. Toto omezení má ale své výhody. Mezi jeho přednosti patří:
- Čistá a nízká náročnost
- Poskytuje pouze základní kód a ponechává vývojářům volnost při psaní testovacích případů
- Podporuje standardy ES6, Typescript a CoffeeScript
- Podporuje spouštění testů na většině moderních prohlížečů
Cypress.io
Cypress je zajímavý testovací rámec, který běží přímo v prohlížeči. Poskytuje interaktivní uživatelské rozhraní v prohlížeči formou webové stránky. Je snadno instalovatelný na Mac, Windows i Linux. Jedná se o nezávislý testovací nástroj, který nemusí být úzce integrován s vaším kódem.
Puppeteer
Puppeteer je vynikající rámec pro provádění testů, který vytvořil tým společnosti Google. Poskytuje bezhlavé Chrome API pro aplikace NodeJS.
Puppeteer se primárně používá pro aplikace specifické pro prohlížeč, jako je testování procházení, testování struktury stránek, pořizování snímků obrazovky a zachycení předem vykresleného obsahu pro single-page aplikace. Mezi další výhody Puppeteer patří:
- Možnost nastavit vlastní rozlišení a velikosti prohlížeče
- Podpora testování rozšíření pro Chrome
- Podpora automatizace odesílání formulářů, testování uživatelského rozhraní a vstupů z klávesnice
- Podporuje funkce ES6, jako jsou await a async
ChaiJS
ChaiJS je rámec zaměřený na testování řízené chováním. Může být používán paralelně s jakýmkoli jiným rámcem. Existuje již nějakou dobu a vyvíjí se spolu se standardy JavaScriptu.
ChaiJS spolupracuje s Node, prohlížeči i s webovým rozhraním a má skvělou komunitu podpory a dokumentaci.
Qunit
Qunit – výkonný testovací rámec, který je navržený pro použití s frontendem. Je první volbou vývojářů knihoven JQuery, JQuery Mobile a JQuery UI.
Může být napsán jako samostatný JS soubor a spuštěn na jakékoli webové stránce. Standardní metodou testování s Qunit je zahrnout soubor na webovou stránku a spustit testy pomocí pluginu Qunit. Mezi výhody QUnit patří:
- Může být použit k vytvoření opakovaně použitelných testovacích skriptů
- Poskytuje webové rozhraní pro vizuální prohlížení výstupů testovacích případů
- Soubor pluginů, které jsou na něm postavené, umožňuje rychlejší vývoj testovacích případů
Sinon
Sinon.js doplňuje rámec testování jednotek pro simulování/mockování skutečných věcí. Během testování nemáte vždy k dispozici všechna data! Podporuje prostředí Chrome, IE 11, Firefox, Edge, Safari a Node.js.
Dobrou alternativou k Sinonu je testdouble.js.
Závěr
Testování jednotek je klíčové pro zajištění, že změny kódu nenaruší funkčnost aplikace a že aplikace pracuje v souladu s obchodními požadavky. Doufám, že vám výše uvedené informace pomohou. Pokud jste v oblasti testování nováčky, možná vás zaujme online kurz, který vás naučí provádět testování jednotek v JS s ChaiJS, Sinon a Mocha.