Testaus

AngularJS:n kehittäjät ovat tehneet myös Karma-testiajajan jolla voi helposti suorittaa JavaScript Unit-testejä oikeassa selaimessa eikä missään simuloidussa ympäristössä. Karma vaatii Node.js:n toimiakseen. Karma ei mitenkään vaadi Angularia joten sillä voi testata kaikkea JavaScript-koodia.

Karmalla pystyy ajamaan myös end-to-end testejä joissa selaimeen avataan oikea ohjelman sivu ja Karma klikkailee linkkejä. Näiden tekeminen on työläämpää kuin Unit-testien joten niitä ei käydä läpi tässä. Lisää tietoa AngularJS:n eri testitavoista löytyy loistavasta Year of Moo -blogista.

Node.js asennus

  1. Lataa asennuspaketti ja asenna se oletusasetuksilla
  2. Asennuksen jälkeen Noden package manager npm on PATH:ssa joten sitä voi käyttää suoraan komentoriviltä kaikissa hakemistoissa

Karman asennus

  1. Suorita komenriillä komento npm install -g karma
  2. Asennuksen jälkeen Karman käynnistyskomento karma on PATH:ssa joten sitä voi käyttää suoraan komentoriviltä kaikissa hakemistoissa

Testien ajaminen

  1. Aseta Karman tarvitsema viite Firefoxin (tai muun selaimen) polkuun komentorivillä. Esim. SET FIREFOX_BIN=C:\Program Files (x86)\Mozilla Firefox\firefox.exe. Tämä täytyy tehdä joka kerta ennen testien ajoa ellei tätä laita ympäristömuuttujiin.
  2. Menen komentorivillä hakemistoon jossa on karma.conf.js ja suorita karma start

Testien kirjoittaminen

Testit kirjoitetaan Jasmine frameworkilla. Jasminen ei sinänäsä ole mitenkään sidoksissa Angulariin joten sitä voi käyttää kaiken JavaScript-koodin testaamiseen.

Jasminen tärkeimmät komennot:

  • describe määrittää testialueen jolle suoritetaan samat beforeEach-metodit
  • beforeEach määrittää ennen joka testimetodia ajettavan koodin. Sama kuin JUnitin @Before
  • it määrittää yhden testin. Angularin palveluita voi injektoida inject metodilla.
  • spyOn asettaa kuuntelijan metodille. Kuuntelija äänittää kutsujen määrän ja parametrit jotka voi validoida. Alkuperäistä metodia ei kutsuta ellei määritä spyOn(...).andCallThrough(). Alkuperäisen metodin sijaan voi kutsua myös omaa mock-implementaatiota spyOn(...).andCallFake(function() {}) -metodilla
  • expect vastaa JUnitin assert-metodeja. Arvojen yhtäsuuruutta voi verrata expect(...).toEqual() metodilla ja vakoiltujen metodien parametreja voi tarkistaa expect(...).toHaveBeenCalledWith() metodilla