Angular - testowanie klas

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 860 razy

W przypadku obiektów klas, które nie dziedziczą testowanie jest bardzo proste. Ważne jest aby zrozumieć, że testować należy jedynie metody publiczne (public) klasy, jeżeli istnieje konieczność testowania metod prywatnych (private) czy chronionych (protected) należy wydzielić je do oddzielnej klasy i z poziomu takiej klasy testować (tak przynajmniej jest w teorii).

Oto przykładowa prosta klasa przeznaczona do przetestowania:

export class Student { birthday: Date; name: string; surname: string; constructor( name: string, surname: string, birthday: Date ) { this.name = name; this.surname = surname; this.birthday = birthday; } get age(): number { return Math.floor( ( ( (new Date()).getTime() - this.birthday.getTime() ) / ( 3600 * 24 * 356 * 1000 ) ) ); } }

Jak widać nie ma tu zbyt wiele do przetestowania, to co można przetestować to:

Czas zacząć zabawę w testowanie:

import { Student } from './student'; describe('Student', () => { const nowDate: Date = new Date(); const birthday: Date = new Date( nowDate.getFullYear() - 27, nowDate.getMonth(), nowDate.getDay() ); const name = 'Grzegorz'; const surname = 'Brzęczyszczykiewicz'; const student: Student = new Student( name, surname, birthday ); it('should create an instance', () => { expect(student).toBeTruthy(); }); it( 'Should be initialized with data', () => { expect( student.birthday ).toEqual( birthday ); expect( student.surname ).toEqual( surname ); expect( student.name ).toEqual( name ); } ); describe( 'method age', () => { it( 'should return correct age', () => { expect(student.age).toEqual(27); } ); } ); });

Funkcja describe przyjmuje jako pierwszy argument opis testu, zaś jako drugi argument funkcję, w której można umieścić wywołania funkcji związanych z inicjalizacją środowiska testowego oraz wywołaniem funkcji it opisującej konkretny przypadek testu i wykonującej test za pomocą funkcji expect.

Wynikiem testu będzie wyświetlenie w oknie przeglądarki mniej więcej takich danych:

Widok wyniku końcowego testowania całej aplikacji
Rys. 1
Widok testów jednostkowych całej aplikacji w skład których wchodzą testy utworzonej klasy Student

Można jeszcze się pokusić o uruchomienie testu z parametrem --code-coverage, co spowoduje utworzenie katalogu coverage zawierającego plik index.html, po którego wyświetleniu w przeglądarce można zobaczyć stopień pokrycia kodu testami (co pokazane zostało na poniższym rysunku).

Angular - testy jednostkowe widok pliku index.html wyświetlającego zestawienie pokrycia kodu testami
Rys. 2
Angular - testy jednostkowe widok pliku index.html wyświetlającego zestawienie pokrycia kodu testam

Po kliknięciu na dany link można oczywiście wyświetlić dalsze szczegóły dotyczące testowanego kodu. Są tam informacje o tym ile razy dany kod został wywołany, które instrukcje warunkowe nie zostały wykonane ani razu, które funkcje nie zostały wywołane ani razu. Ogólnie zalecam pobawienie się tym samemu.