Czas na parę słów o testach. Tytułowa Jasmin to jeden z frameworków do testów. W Angular cli Jasmin połączona jest z task runner’em – Karma. Czyli testy piszemy w Jasmine, a odpala nam je i wyświetla w przeglądarce Karma.

Nim przejdziemy do testów samych w sobie, krótko o samych rodzajach testów. Mamy:
  • unit test – testujemy odizolowany komponent (bez API, zależności)
  • integration test – testujemy komponent, ale wraz z jego zależnościami (z integracjami)
  • end-to-end test – testy symulują zachowanie user’a (wolne testy)
Jasmin pozwala właśnie na unit testy. Jak wygląda taki test?
Krótkie wyjaśnienie:
describe- służy do grupowania powiązanych tematycznie testów
it – (spec) zawiera konkretny test
expect…- sprawdzenie czy wartość spełnia warunek
Mamy możliwość wyłączania testów zarówno całych zestawów jak i pojedynczych. Wystarczy przed ‘describe’ lub ‘it’ dodać ‘x’. W przypadku konkretnego testu, możemy zamiast ‘x‘ wykorzystać polecenie pending(). Efekt będzie ten sam.

Przydatną funkcjonalnością jest mechanizm spyOn. Powoduje on dosłowne szpiegowanie wywołań funkcji oraz przekazywanych do niej argumentów. To szpiegowanie użycia funkcji nie powoduje ich wywoływana (wykonania).

Piszemy nasz bardziej złożony test. Deklarujemy zmienną. W beforeEach przygotowujemy funkcję, ustawiamy szpiega, wywołujemy funkcję. I co się okazuje? Wartość zmiennej wheel nie uległa zmianie.
 

 

Co zrobić, by spyOn śledził wywołanie i jednocześnie wykonywał funkcję? Należy zmienić jego domyślne zachowanie.
spyOn(changeWheel, ‘setVal’).and.callThrough();
Możemy spowodować, aby szpieg zwracał konkretną wartość.
spyOn().and.returnValue();

W powyższym przykładzie funkcja setVal() zawsze będzie zwracać wartość 2 (przekazaną wartość do returnValue).
Możemy spowodować, aby szpieg “podstawił wykonanie innej funkcji”.
 spyOn().and.callFake();

Tu efekt testów, choć inny zapis, będzie tożsamy z poprzednim przykładem dotyczącym returnValue().

Author: