Les proves de components són una part essencial del desenvolupament d'aplicacions Angular. Aquest tipus de proves asseguren que els components funcionin correctament de manera aïllada, sense dependre d'altres parts de l'aplicació. En aquesta secció, aprendrem com configurar i escriure proves per als components Angular utilitzant el framework de proves Jasmine i l'eina de test Karma.
Objectius
- Comprendre la importància de les proves de components.
- Configurar l'entorn de proves per a components Angular.
- Escriure proves unitàries per a components.
- Utilitzar mocks i espies per aïllar les proves.
- Executar i interpretar els resultats de les proves.
- Configuració de l'entorn de proves
Angular CLI ve amb una configuració predeterminada per a Karma i Jasmine, que facilita la creació i execució de proves. Quan creem un nou component amb Angular CLI, es genera automàticament un fitxer de proves amb l'extensió .spec.ts
.
Exemple de fitxer de proves generat
import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MyComponent } from './my-component.component'; describe('MyComponent', () => { let component: MyComponent; let fixture: ComponentFixture<MyComponent>; beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [ MyComponent ] }) .compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(MyComponent); component = fixture.componentInstance; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); });
Explicació del codi
- Imports: Importem
ComponentFixture
iTestBed
d'@angular/core/testing
i el component que volem provar. - Describe: Definim un bloc de proves per al component
MyComponent
. - BeforeEach (async): Configura el mòdul de proves amb el component que volem provar.
- BeforeEach: Crea una instància del component i la seva fixture.
- It: Defineix una prova que verifica si el component es crea correctament.
- Escriure proves unitàries per a components
Prova de propietats del component
Podem escriure proves per verificar les propietats del component.
Prova de mètodes del component
Podem provar els mètodes del component per assegurar-nos que funcionen correctament.
it('should increment the counter', () => { component.increment(); expect(component.counter).toBe(1); });
Prova de la plantilla del component
Podem verificar que la plantilla del component es renderitza correctament.
it('should render title in a h1 tag', () => { const compiled = fixture.nativeElement; expect(compiled.querySelector('h1').textContent).toContain('default title'); });
- Utilitzar mocks i espies
Mock de serveis
Podem utilitzar mocks per aïllar les proves del component dels serveis externs.
class MockMyService { getValue() { return 'mock value'; } } beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [ MyComponent ], providers: [ { provide: MyService, useClass: MockMyService } ] }) .compileComponents(); });
Espies
Podem utilitzar espies per verificar que els mètodes dels serveis es criden correctament.
it('should call getValue from MyService', () => { const myService = TestBed.inject(MyService); spyOn(myService, 'getValue').and.returnValue('mock value'); component.ngOnInit(); expect(myService.getValue).toHaveBeenCalled(); });
- Executar i interpretar els resultats de les proves
Per executar les proves, utilitzem el següent comandament:
Aquest comandament executarà Karma, que correrà totes les proves i mostrarà els resultats en una finestra del navegador.
Interpretació dels resultats
- Verd: La prova ha passat correctament.
- Vermell: La prova ha fallat. Karma mostrarà un missatge d'error amb informació sobre la causa del fall.
Resum
En aquesta secció, hem après com configurar i escriure proves unitàries per a components Angular. Hem vist com utilitzar mocks i espies per aïllar les proves i com executar-les utilitzant Karma. Les proves de components són essencials per assegurar la qualitat i la fiabilitat de les nostres aplicacions Angular.
Curs d'Angular
Mòdul 1: Introducció a Angular
- Què és Angular?
- Configuració de l'entorn de desenvolupament
- Arquitectura d'Angular
- Primera aplicació Angular
Mòdul 2: Components d'Angular
- Comprendre els components
- Crear components
- Plantilles de components
- Estils de components
- Interacció de components
Mòdul 3: Enllaç de dades i directives
- Interpolació i enllaç de propietats
- Enllaç d'esdeveniments
- Enllaç de dades bidireccional
- Directives integrades
- Directives personalitzades
Mòdul 4: Serveis i injecció de dependències
Mòdul 5: Enrutament i navegació
Mòdul 6: Formularis a Angular
Mòdul 7: Client HTTP i observables
- Introducció al client HTTP
- Fer sol·licituds HTTP
- Gestionar respostes HTTP
- Utilitzar observables
- Gestió d'errors
Mòdul 8: Gestió d'estat
- Introducció a la gestió d'estat
- Utilitzar serveis per a la gestió d'estat
- NgRx Store
- NgRx Effects
- NgRx Entity
Mòdul 9: Proves a Angular
- Proves unitàries
- Proves de components
- Proves de serveis
- Proves de cap a cap
- Simulació de dependències
Mòdul 10: Conceptes avançats d'Angular
- Angular Universal
- Optimització del rendiment
- Internacionalització (i18n)
- Tubs personalitzats
- Animacions d'Angular