Les proves unitàries són una part essencial del desenvolupament de programari, ja que permeten verificar que les diferents parts del codi funcionen correctament de manera independent. En aquest tema, aprendrem com configurar i escriure proves unitàries per a una aplicació Ionic.
Objectius del Tema
- Entendre la importància de les proves unitàries.
- Configurar l'entorn de proves unitàries en un projecte Ionic.
- Escriure i executar proves unitàries bàsiques.
- Importància de les Proves Unitàries
Les proves unitàries ajuden a:
- Detectar errors en fases primerenques del desenvolupament.
- Assegurar que els canvis en el codi no introdueixin nous errors (regressions).
- Millorar la qualitat del codi i la confiança en el producte final.
- Configuració de l'Entorn de Proves Unitàries
2.1 Instal·lació de Dependències
Ionic utilitza Angular, i Angular ve amb un conjunt d'eines per a proves unitàries, com Jasmine i Karma. Per començar, assegura't que tens les dependències necessàries instal·lades:
npm install --save-dev @angular/cli @angular/core @angular/compiler-cli jasmine-core karma karma-chrome-launcher karma-jasmine karma-jasmine-html-reporter
2.2 Configuració de Karma
Karma és un test runner per a JavaScript. La configuració de Karma es troba en el fitxer karma.conf.js
. Aquí tens un exemple de configuració bàsica:
module.exports = function (config) { config.set({ basePath: '', frameworks: ['jasmine', '@angular-devkit/build-angular'], plugins: [ require('karma-jasmine'), require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), require('@angular-devkit/build-angular/plugins/karma') ], client: { clearContext: false // leave Jasmine Spec Runner output visible in browser }, reporters: ['progress', 'kjhtml'], port: 9876, colors: true, logLevel: config.LOG_INFO, autoWatch: true, browsers: ['Chrome'], singleRun: false, restartOnFileChange: true }); };
- Escriure Proves Unitàries
3.1 Estructura d'una Prova Unitària
Les proves unitàries en Angular es fan amb Jasmine. Aquí tens un exemple bàsic d'una prova unitària per a un component:
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(); }); });
3.2 Explicació del Codi
describe
: Defineix un conjunt de proves per a un component o servei.beforeEach
: Executa codi abans de cada prova. Aquí es configura el mòdul de proves i es crea una instància del component.it
: Defineix una prova individual. En aquest cas, verifica que el component es crea correctament.
3.3 Exemple Pràctic
Suposem que tenim un component CounterComponent
que incrementa un comptador. Aquí tens una prova unitària per verificar aquesta funcionalitat:
import { ComponentFixture, TestBed } from '@angular/core/testing'; import { CounterComponent } from './counter.component'; describe('CounterComponent', () => { let component: CounterComponent; let fixture: ComponentFixture<CounterComponent>; beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [ CounterComponent ] }) .compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(CounterComponent); component = fixture.componentInstance; fixture.detectChanges(); }); it('should increment counter', () => { component.increment(); expect(component.counter).toBe(1); }); });
- Executar les Proves Unitàries
Per executar les proves unitàries, utilitza el següent comandament:
Aquest comandament obrirà un navegador i mostrarà els resultats de les proves.
Exercicis Pràctics
Exercici 1: Prova Unitària per a un Servei
Crea un servei MathService
amb una funció add(a: number, b: number): number
que retorni la suma de dos números. Escriu una prova unitària per verificar aquesta funció.
Solució
// math.service.ts import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class MathService { add(a: number, b: number): number { return a + b; } } // math.service.spec.ts import { TestBed } from '@angular/core/testing'; import { MathService } from './math.service'; describe('MathService', () => { let service: MathService; beforeEach(() => { TestBed.configureTestingModule({}); service = TestBed.inject(MathService); }); it('should add two numbers', () => { expect(service.add(1, 2)).toBe(3); }); });
Conclusió
En aquesta secció, hem après la importància de les proves unitàries, com configurar l'entorn de proves en un projecte Ionic, i com escriure i executar proves unitàries bàsiques. Les proves unitàries són una eina poderosa per assegurar la qualitat del codi i la seva robustesa davant de canvis futurs. En el proper tema, explorarem les proves de cap a cap per verificar el funcionament complet de l'aplicació.
Curs de Desenvolupament Ionic
Mòdul 1: Introducció a Ionic
- Què és Ionic?
- Configuració de l'Entorn de Desenvolupament
- Creant la Teva Primera App Ionic
- Entenent l'Estructura del Projecte
- Executant i Depurant la Teva App
Mòdul 2: Components Bàsics i Navegació
- Visió General dels Components Ionic
- Utilitzant Botons i Icones Ionic
- Creant i Utilitzant Pàgines
- Navegació i Enrutament
- Pestanyes i Menús Laterals
Mòdul 3: Estilització i Tematització
- Introducció a l'Estilització Ionic
- Utilitzant CSS i SCSS en Ionic
- Tematitzant la Teva App Ionic
- Disseny Responsiu en Ionic
- Personalitzant Components Ionic
Mòdul 4: Treballant amb Dades
- Introducció al Binding de Dades
- Utilitzant Serveis Angular
- Peticions HTTP i APIs
- Emmagatzemant Dades Localment
- Utilitzant Ionic Storage
Mòdul 5: Components i Funcionalitats Avançades
- Utilitzant Formularis Ionic
- Validació i Gestió d'Errors
- Utilitzant Plugins Ionic Native i Cordova
- Accedint a Funcionalitats del Dispositiu
- Notificacions Push
Mòdul 6: Proves i Desplegament
- Proves Unitàries en Ionic
- Proves de Cap a Cap
- Construint per a Producció
- Desplegant a les Botigues d'Aplicacions
- Integració i Lliurament Continu