Javaskriptimaailma tarjoaa runsaasti vaihtoehtoja … no, melkein kaikkeen. Tänään keskitymme testaustyökaluihin ja vastaamme kysymykseen ”Mikä on paras JavaScript-kehys?”
Kävimme läpi viisi suosituinta JavaScript-testauskehystä, ja artikkelin lopussa valitsemme niistä mielestämme parhaan. Aloitetaan.
Mitkä ovat testauskehykset?
Ennen kuin sukellamme kehysluetteloon, on tärkeää ymmärtää, mikä testauskehys on.
Yksikertaisesti sanottuna testauskehys on työkalu – tai joukko työkaluja – joka auttaa sinua suorittamaan yksikkötestausta. Testauskehyksen tulisi tarjota sinulle ainakin
- Säännöt tai konventiot testitapausten kirjoittamiseen ja niiden järjestämiseen testisarjoiksi.
- Välineet testien automaattiseen suorittamiseen ja itsearviointiin.
- Testien tulokset, jotka näytetään ja muotoillaan.
Viisi JavaScript-testauskehystä, jotka kannattaa tarkistaa
Tässä vaiheessa sinulla pitäisi olla vakaa käsitys siitä, mitä testauskehykset ovat ja miksi niitä tarvitaan. Kun tämä on selvitetty, on aika tarttua työkalujen listaan aloittaen Mochasta.
Mocha
Mocha, jota joskus kutsutaan myös nimellä MochaJS, on testikehys, joka toimii sekä Node.js:ssä että selaimessa. Se julkaistiin vuonna 2011 ja on siitä lähtien ollut yksi JavaScript-maailman suosituimmista testauskehyksistä. State of JavaScript -raportin mukaan Mochan suosio on kuitenkin ollut laskussa viime vuosina, vaikka se on edelleen kiistatta käytetyin ja tunnetuin työkalu.
Tämä kehys tekee asynkronisesta testauksesta yksinkertaista ajamalla testit sarjaan. Tämä mahdollistaa tarkan raportoinnin ja samalla tavoittamattomien poikkeusten kartoittamisen oikeisiin testitapauksiin. Mocha-kehyksen kokoonpano on erittäin joustava. Sen avulla voit liittää sen pariksi kirjastoja, joita erityisesti tarvitset toiminnallisuuksiin, kuten väittämiin, mockingiin ja niin edelleen.
Tällaisen joustavuuden haittapuolena on se, että Mocha vaatii enemmän työtä alkuasennukseensa. Lisäksi, kun muissa kehyksissä on jo mukana assertions- ja mocking-toiminnallisuudet, Mocha vaatii lisätyökaluja niitä varten.
Official site: mochajs.org
Repository: github.com/mochajs/mocha
Puppeteer
Puppeteer on Node.js-kirjasto, jonka avulla käyttäjät voivat ohjata päätöntä Chrome- tai Chromium-selainta. Näin on mahdollista automatisoida testejä, jotka tavallisesti suoritettaisiin manuaalisesti tavallisella selaimella. Projektin sivulla luetellaan joitakin esimerkkejä testeistä, joita voit suorittaa:
- Luo sivujen kuvakaappaukset ja PDF-tiedostot.
- Kierrä SPA-sovellusta (single-page application) ja luo valmiiksi renderöityä sisältöä (eli ”SSR” ).
- Automaattinen lomakkeiden lähettäminen, UI-testaaminen, näppäimistösyöttö jne.
- Luo ajan tasalla oleva automatisoitu testausympäristö. Suorita testisi suoraan Chromen uusimmassa versiossa käyttäen uusimpia JavaScript- ja selainominaisuuksia.
- Kuvaa sivustosi aikajanan jälki, joka auttaa suorituskykyongelmien diagnosoinnissa.
- Testaa Chrome-laajennuksia.
- Testim julkaisi ilmaisen tallentimen Puppeteerille. Tutustu siihen ja käytä sitä niin usein kuin haluat.
Official site: developers.google.com/web/tools/puppeteer
Repository: github.com/puppeteer/puppeteer
Jasmine
Jasmine on JavaScriptiä käyttävä BDD-testauskehys (käyttäytymislähtöinen kehitys).
Tämässä kehyksessä on jo valmiiksi mukana melkeinpä kaikki, mitä tarvitset testauksen aloittamiseksi. Siinä on sisäänrakennettuja väitteitä ja testikaksosia vakoiluineen, toisin kuin esimerkiksi Mochassa, joka vaatii sinua asentamaan kolmannen osapuolen työkaluja näitä toiminnallisuuksia varten.
Jasmine on kuitenkin myös joustava, ja se voi integroitua saumattomasti suureen määrään muita testaustyökaluja. Voit helposti käyttää Karmaa testirunnerina tai käyttää Sinon.JS:ää mocking-tarpeisiin.
Official site: jasmine.github.io/
Repository: github.com/jasmine/jasmine
QUnit
QUnit oli alun perin osa jQuery-ohjelmointikirjastoa. John Resig loi sen jQueryn, jQuery UI:n ja jQuery Mobilen testaamista varten. Vuonna 2008 QUnit irrotettiin jQueryn koodipohjasta ja julkaistiin itsenäisenä kehyksenä, mutta se vaatisi edelleen jQueryn toimiakseen. Vuonna 2009 tämä korjattiin uudelleenkirjoituksella, jolloin QUnit oli vihdoin riippumaton jQuerysta.
Vaikka QUnit oli alun perin suunnattu jQuerylle, se on nykyään yleinen kehys, jolla voi testata mitä tahansa JavaScript-koodia ja joka tukee sekä asiakas- että palvelinpuolen ympäristöjä.
Voit ajatella, että QUnit on JavaScriptin edustaja yksikkötestauksen kehysten xUnit-perheessä. Sen käyttöönotto on nopeaa ja helppoa. Lisäksi, koska se on ollut olemassa ainakin 12 vuotta, se on hyvin tuettu työkalu.
Official site: qunitjs.com
Repository: github.com/qunitjs/qunit
Jest
Jest on JavaScriptin testauskehys, joka keskittyy yksinkertaisuuteen. Facebookin julkaisema Jest pyrkii toimimaan suoraan laatikosta ja ilman mitään konfigurointeja.
Jestin ”Getting started” -sivulla näet, että voit asentaa sen, kirjoittaa ensimmäisen testin ja ajaa sen muutamassa minuutissa ilman monimutkaisia asetuksia tai lisäasennuksia. Toinen Jestin etu on sen vaikuttava suorituskyky.
Jestiä käytetään ensisijaisesti React-sovellusten testaamiseen, mutta se ei tarkoita, että sinun on rajoituttava käyttämään sitä vain kehyksellä kirjoitettujen sovellusten testaamiseen. Päinvastoin: voit käyttää sitä myös Node-, Angular- ja Vue-sovellusten testaamiseen, vain muutamia esimerkkejä mainitaksemme.
Official site: jestjs.io/
Repository: github.com/facebook/jest
Huomionarvoiset poissaolot
Voi olla, että ihmettelet, mikseivät jotkin kuuluisat JavaScript-testausvälineet päässeet listallemme. Ehkä sinusta tuntuu, että muun muassa Karman, Sinonin ja Chain kaltaiset työkalut ovat tarpeeksi suosittuja ollakseen listalla. Miksi emme ottaneet niitä mukaan?
Yksikertaisesti sanottuna halusimme pitää listan mahdollisimman tiiviinä. Tätä varten päätimme olla sisällyttämättä listaan testaustyökaluja, jotka eivät varsinaisesti ole kehyksiä. Tämä on siis syy siihen, miksi Karman kaltainen supersuosittu työkalu ei päässyt listalle: se on testijuoksija, ei kehys. Sama perustelu pätee Sinoniin (mocking-työkalu) ja Chaihin (assertion-kirjasto).
Voisit väittää, että Puppeteer ei oikein sovi listalle, ja jossain määrin olenkin samaa mieltä. Eli kaikki muut työkalut ovat kehyksiä, jotka soveltuvat paremmin yksikkötestaustyylisten testien suorittamiseen, kun taas Puppeteer on enemmänkin selaimen automatisointityökalu. Se on silti testauskehys siinä mielessä, että sen avulla voi suunnitella automatisoituja testejä, jotka ajetaan myöhemmin ilman ihmisen väliintuloa.
Verdict: Mikä on paras JavaScript-testauskehys?
Olemme esitelleet viisi JavaScriptin testauskehystä. Nyt on aika lunastaa postauksen otsikon lupaus ja valita paras. Tätä varten arvioimme kehykset neljän kriteerin mukaan: kustannukset, asennus, asennuksen helppous ja oppimiskäyrä.
Kehysten arviointi
Kustannukset
Ensimmäinen kriteeri on meille varmasti helpoin arvioida. Kaikki tässä käsittelemämme kehykset ovat avoimen lähdekoodin projekteja, joten voit ladata ja käyttää niitä ilmaiseksi (kuten olutta). Meillä ei siis ole selvää voittajaa. Siirrytäänpä eteenpäin.
Asennus
Kaikkien edellä mainittujen työkalujen asentaminen on melko helppoa. Voithan asentaa ne kaikki käyttämällä npm:ää (tai vaihtoehtoisesti Yarnia.) Osa työkaluista tarjoaa kuitenkin lisäasennusvaihtoehtoja.
Npm:n ja Yarnin lisäksi voit esimerkiksi asentaa QUnitin erillisenä latauksena. Mutta se edellyttäisi, että varastoit ja hallinnoit tätä hyödykettä. Sen sijaan voit käyttää jQueryn CDN:ssä isännöityä versiota. Jasmine tarjoaa myös itsenäisen version, joka ei ole riippuvainen Nodesta ja jonka avulla voit ajaa speksejä selaimen avulla.
Onko meillä siis voittaja? Mielestämme kyllä. Jos valitsisimme vain asennuksen helppouden perusteella, saisimme toisen tasapelin. Mutta kuten olemme nähneet, QUnit ja Jasmine tarjoavat molemmat enemmän vaihtoehtoja, koska niitä voi käyttää itsenäisinä kirjastoina. Onko tästä lisäjoustavuudesta hyötyä? Oma mielipiteesi voi vaihdella, mutta meidän mielestämme QUnit ja Jasmine ovat tässä voittajia.
Voittajat: QUnit ja Jasmine
Asennuksen helppous
Katsotaan nyt asennuksen helppoutta. Alkuasennuksen osalta meillä on tässä selvä voittaja: Jest. Kehys lupaa nollakonfiguraation käytön ja pitää lupauksensa. Toki se antaa mahdollisuuden tehdä valinnaisia konfiguraatioita, mutta tuntuu uskomattomalta asentaa testauskehys ja saada oikea testi käyntiin noin kahdessa minuutissa ilman mitään konfiguraatiota tai lisätyökalujen asennusta.
Voittaja: Jest
Oppimiskäyrä
Viimeiseksi oppimiskäyrä. Joudumme valitsemaan Jestin jälleen tässä. Koska siinä on laaja API eikä se vaadi niin paljon kolmannen osapuolen työkaluja kuin muut kehykset, Jestin oppimiskäyrä on väistämättä vähemmän jyrkkä.
Voittaja: Jest
Tässä on voittaja
Kun olemme käsitelleet viisi JavaScript-testauskehystä ja analysoineet niitä neljällä kriteerillä, on aika valita voittaja.
Niin, koska se oli voittaja kahdessa neljästä käyttämästämme kriteeristä, valitsemme voittajaksi Jestin. Se ei tarkoita, etteikö sinun pitäisi kokeilla muita työkaluja. Päinvastoin: kokeile ja harjoittele mahdollisimman paljon, sillä se on paras tapa oppia.