A unit tesztelés célja annak biztosítása, hogy az alkalmazás egyes részei, mint például a komponensek, szolgáltatások és más osztályok, megfelelően működnek az elvárt specifikációk szerint.
A unit tesztelés alapvetően kis, önálló kód részek (egységek) tesztelését jelenti, annak érdekében, hogy megbizonyosodjunk arról, hogy azok megfelelően működnek-e.
Angular-ban a unit teszteket általában a Jasmine teszt keretrendszerrel írják, és a Karma teszt futtatóval futtatják. Az Angular CLI alapértelmezésben tartalmazza ezeket az eszközöket, így egyszerűen létrehozhat és futtathat teszteket.
Néhány alapelv és lépés az Angular unit teszteléshez:
- Tesztelési környezet előkészítése: Ha egy új Angular projektet hoz létre az Angular CLI-val (
ng new my-app), a Jasmine és a Karma automatikusan be lesz állítva. - Spec fájlok: A teszteseteket
.spec.tskiterjesztésű fájlokban tárolják. Például, ha egymy.component.tsnevű komponens van, a hozzá tartozó teszteseteket amy.component.spec.tsfájlban találhatjuk. - Teszt leírása: A Jasmine használatával
describeésitblokkokat használunk a tesztek leírásához.
describe('MyComponent', () => {
it('should do something', () => {
// A teszt logikája itt jön
});
});
- Teszt futtatása: A teszteket a
ng testparancs kiadásával futtathatja a Karma segítségével. - Tesztelési eszközök: Az Angular tesztkönyvtárat (
@angular/core/testing) használhatjuk az Angular specifikus funkciók teszteléséhez, mint például a komponensek vagy a szolgáltatások. Ezek közé tartozik azasync,TestBedés más mockolási és utility eszközök. - Elvárások (assertions): A Jasmine
expectfunkcióját használjuk az elvárások meghatározásához, melyekkel ellenőrizzük, hogy a kód megfelelően működik-e. Például:expect(something).toBe(true).
Összefoglalva, az Angular unit tesztelés lehetővé teszi az alkalmazás különböző részeinek önálló tesztelését, hogy biztosítsuk azok helyes működését. Az Angular CLI, a Jasmine és a Karma kombinációja egy erőteljes eszköztárat biztosít az Angular alkalmazások teszteléséhez.
Példa
Vegyük alapul az alábbi egyszerű Angular komponenst:
hello.component.ts:
import { Component } from '@angular/core';
@Component({
selector: 'app-hello',
template: `<h1>Hello {{name}}!</h1>`
})
export class HelloComponent {
name = 'World';
}
Most írjunk egy unit tesztet, amely ellenőrzi, hogy a komponens helyesen inicializálódik-e és megfelelő üzenetet jelenít-e meg.
hello.component.spec.ts:
import { TestBed, ComponentFixture } from '@angular/core/testing';
import { HelloComponent } from './hello.component';
describe('HelloComponent', () => {
let component: HelloComponent;
let fixture: ComponentFixture<HelloComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [HelloComponent]
});
fixture = TestBed.createComponent(HelloComponent);
component = fixture.componentInstance;
});
it('should create the Hello component', () => {
expect(component).toBeTruthy();
});
it('should display "Hello World!"', () => {
fixture.detectChanges();
const compiled = fixture.debugElement.nativeElement;
expect(compiled.querySelector('h1').textContent).toContain('Hello World!');
});
it('should update the name property', () => {
component.name = 'Angular';
fixture.detectChanges();
const compiled = fixture.debugElement.nativeElement;
expect(compiled.querySelector('h1').textContent).toContain('Hello Angular!');
});
});
Nézzük át, mit csinál a fenti tesztkód:
- Setup: A
beforeEachblokkban konfiguráljuk aTestBed-et aHelloComponentkomponenssel, majd létrehozunk egy példányt a komponensből. - Első teszt: Ellenőrzi, hogy a komponens példányosításra került-e.
- Második teszt: Azt ellenőrzi, hogy az elvárt üzenet (“Hello World!”) megjelenik-e a komponensben.
- Harmadik teszt: Azt ellenőrzi, hogy ha megváltoztatjuk a komponens
nametulajdonságát, akkor a megjelenített üzenet is megváltozik-e.
Ezek az alapvető lépések és logika, amelyeket egy egyszerű Angular komponens unit teszteléséhez alkalmazhatunk.