Sv JavaScript-världen erbjuder många alternativ för … ja, i stort sett allt. Idag fokuserar vi på testverktyg och svarar på frågan ”Vad är det bästa JavaScript-ramverket?”
Vi går igenom fem av de mest populära JavaScript-testramverken och i slutet av artikeln kommer vi att välja det som vi tycker är bäst. Låt oss börja.
Vad är testramverk?
Innan vi dyker ner i vår lista över ramverk är det viktigt att förstå vad ett testramverk är.
Enklare uttryckt är ett testramverk ett verktyg – eller en uppsättning verktyg – som hjälper dig att utföra enhetstest. Ett testramverk bör ge dig åtminstone
- Regler eller konventioner för att skriva testfall och organisera dem i testsviter.
- Metoder för att automatiskt utföra och självgradera testerna.
- Resultat av testerna som visas och formateras.
Fem JavaScript-testramverk som är värda att kolla upp
Härmed bör du ha ett fast grepp om vad testramverk är och varför vi behöver dem. Med det ur vägen är det dags att ta itu med vår lista över verktyg och börja med Mocha.
Mocha
Mocha, ibland även kallad MochaJS, är ett testramverk som körs både i Node.js och i webbläsaren. Det släpptes redan 2011 och har sedan dess varit ett av de mest populära testramverken för JavaScript-världen. Enligt rapporten State of JavaScript har dock Mocha’s popularitet minskat under de senaste åren, även om det fortfarande är det mest använda och kända verktyget.
Detta ramverk gör asynkron testning enkel genom att köra tester seriellt. Det möjliggör noggrann rapportering och samtidigt mappning av okontrollerade undantag till rätt testfall. Mocha-ramverket har en extremt flexibel konfiguration. Det gör att du kan para ihop det med de bibliotek du särskilt behöver för funktioner som assertioner, mocking och så vidare.
Nackdelen med en sådan flexibilitet är att Mocha kräver mer arbete för sin första installation. Dessutom, medan andra ramverk redan kommer med assertions- och mocking-funktionaliteter kräver Mocha ytterligare verktyg för detta.
Official site: mochajs.org
Repository: github.com/mochajs/mocha
Puppeteer
Puppeteer är ett Node.js-bibliotek som gör det möjligt för användare att styra en huvudlös Chrome- eller Chromium-browser. På så sätt är det möjligt att automatisera tester som du vanligtvis skulle utföra manuellt med en vanlig webbläsare. På projektets sida listas några exempel på tester som du kan utföra:
- Generera skärmdumpar och PDF-filer av sidor.
- Genera en SPA (single-page application) och generera förrenderat innehåll (dvs. ”SSR” ).
- Automatisera inlämning av formulär, UI-testning, tangentbordsinmatning etc.
- Skapa en uppdaterad, automatiserad testmiljö. Kör dina tester direkt i den senaste versionen av Chrome med hjälp av de senaste JavaScript- och webbläsarfunktionerna.
- Fånga en tidsspårning av din webbplats för att hjälpa till att diagnostisera prestandaproblem.
- Testa Chrome-tillägg.
- Testim släppte en gratis inspelare för Puppeteer. Kolla in den och använd den så ofta du vill.
Official site: developers.google.com/web/tools/puppeteer
Repository: github.com/puppeteer/puppeteer
Jasmine
Jasmine är ett testramverk för BDD-testning (beteendestyrd utveckling) av JavaScript.
Det här ramverket innehåller redan i stort sett allt du behöver för att börja testa. Det har inbyggda assertions och testdubbleringar med spioner, till skillnad från till exempel Mocha, som kräver att du installerar verktyg från tredje part för dessa funktioner.
Jasmine är dock också flexibel och kan integreras sömlöst med ett stort antal ytterligare testverktyg. Du kan enkelt använda Karma som testkörare eller använda Sinon.JS för dina mockingbehov.
Official site: jasmine.github.io/
Repository: github.com/jasmine/jasmine
QUnit
QUnit var ursprungligen en del av programmeringsbiblioteket jQuery. John Resig skapade det för att testa jQuery, jQuery UI och jQuery Mobile. År 2008 togs QUnit ut ur jQuery-kodbasen och släpptes som ett fristående ramverk, men det skulle fortfarande kräva jQuery för att fungera. År 2009 fixade de det med en omskrivning, vilket gjorde QUnit äntligen oberoende av jQuery.
Trots att det ursprungligen var inriktat på jQuery är QUnit för närvarande ett generiskt ramverk som kan testa vilken JavaScript-kod som helst, med stöd för både klient- och serversidemiljöer.
Man skulle kunna tänka sig att QUnit är JavaScript-representanten i xUnit-familjen av ramverk för enhetstestning. Det har en snabb och enkel installation. Eftersom det dessutom har funnits i minst 12 år är det ett verktyg med gott stöd.
Official site: qunitjs.com
Repository: github.com/qunitjs/qunit
Jest
Jest är ett testramverk för JavaScript som fokuserar på enkelhet. Jest har släppts av Facebook och syftar till att fungera direkt ur lådan och utan att någon konfiguration behövs.
Om du tar en titt på Jests ”komma igång”-sida ser du att du kan installera det, skriva ditt första test och köra det på några minuter, utan komplicerade inställningar eller ytterligare installationer. En annan fördel med Jest är dess imponerande prestanda.
Jest används främst för att testa React-applikationer, men det betyder inte att du är begränsad till att använda det för att testa endast appar som är skrivna med ramverket. Tvärtom: du kan använda det för att testa Node-, Angular- och Vue-applikationer också, bara för att nämna några.
Official site: jestjs.io/
Repository: github.com/facebook/jest
Notable Absences
Du kanske undrar varför några kända JavaScript-testverktyg inte kom med på vår lista. Kanske tycker du att verktyg som Karma, Sinon och Chai, bland andra, är tillräckligt populära för att finnas med på listan. Varför tog vi inte med dem?
Samt enkelt uttryckt ville vi hålla listan så kortfattad som möjligt. För att göra det har vi beslutat att inte ta med på listan testverktyg som inte är ramverk i strikt mening. Så det är anledningen till att ett superpopulärt verktyg som Karma inte kom med: det är en testkörare, inte ett ramverk. Samma resonemang gäller för Sinon (ett mocking-verktyg) och Chai (ett assertion-bibliotek).
Du kan hävda att Puppeteer inte riktigt passar in i listan och i viss mån håller jag med. Det vill säga, alla de andra verktygen är ramverk som är mer lämpade för att utföra tester i enhetstest-stil, medan Puppeteer är mer av ett verktyg för automatisering av webbläsare. Det är dock fortfarande ett ramverk för testning i den meningen att det gör det möjligt att utforma automatiserade tester som senare körs utan mänsklig inblandning.
Verdict:
Vi har presenterat fem testramverk för JavaScript. Det är nu dags att infria inläggstitelns löfte och välja det bästa. För att göra det kommer vi att bedöma ramverken utifrån fyra kriterier: kostnad, installation, enkel installation och inlärningskurva.
Utvärdering av ramverken
Kostnad
Det första kriteriet är säkert det enklaste för oss att utvärdera. Alla ramverk som vi har behandlat här är projekt med öppen källkod, så du kan ladda ner och använda dem gratis (som i öl). Så vi har ingen klar vinnare här. Låt oss gå vidare.
Installation
Installationen av alla verktygen ovan är ganska enkel. Du kan trots allt installera dem alla med hjälp av npm (eller alternativt Yarn.) Vissa av verktygen erbjuder dock ytterligare installationsalternativ.
För att nämna ett exempel kan du förutom npm och Yarn även installera QUnit som en fristående nedladdning. Men det skulle kräva att du lagrar och hanterar denna tillgång. Istället kan du använda den version som finns på jQuery CDN. Jasmine erbjuder också en fristående version som inte är beroende av Node och som låter dig köra specifikationer med hjälp av din webbläsare.
Så, har vi en vinnare här? Vi tror det. Om vi skulle välja enbart baserat på enkel installation skulle vi ha en annan lottning. Men som vi har sett erbjuder både QUnit och Jasmine fler alternativ, eftersom du kan använda dem som fristående bibliotek. Är denna ytterligare flexibilitet användbar? Det kan variera beroende på vad du tycker, men för oss är QUnit och Jasmine vinnare här.
Vinnare: QUnit och Jasmine
Enklare installation
Nu ska vi titta på hur enkelt det är att installera. När det gäller den första installationen har vi en klar vinnare här: Jest. Ramverket lovar nollkonfigurationsanvändning och håller det löftet. Visst, det tillåter dig att göra valfria konfigurationer, men det känns fantastiskt att installera ett testramverk och ha ett riktigt test igång på ungefär två minuter, utan någon konfiguration eller installation av ytterligare verktyg.
Vinnare: Jest
Lärandekurva
Till sist, lärandekurvan. Vi måste välja Jest igen här. Eftersom Jest har ett brett API och inte kräver lika många verktyg från tredje part som de andra ramverken, har Jest oundvikligen en mindre brant inlärningskurva.
Vinnare: Jest
Här är vinnaren
Efter att ha behandlat fem ramverk för JavaScript-testning och sedan analyserat dem med hjälp av fyra kriterier är det dags att välja en vinnare.
Så, eftersom det var vinnaren i två av de fyra kriterierna vi använde, kommer vi att välja Jest som vår vinnare. Det betyder inte att du inte ska prova de andra verktygen. Tvärtom: experimentera och öva så mycket du kan eftersom det är det bästa sättet att lära sig.