Angular: Testing
Ejemplo Test unitarios implementando libreria Jest
Actualmente se recomienda utilizar Jest para temas de pruebas unitarias y pruebas de integración. Dentro de la razones se cuenta el mejor rendimiento, mayor velocidad y soporte de la comunidad de JavaScript.
Para instalar Jest en Angular, se deben instalar y configurar las dependencias y desinstalar los frameworks de testing predeterminados (Jasmine y Karma). Para esto utilizaremos un esquema generador de codigo (@briebug/jest-schematic) que automatiza esta tarea.
ng add @briebug/jest-schematic
La plantilla realiza las siguientes tareas:
- desinstalar dependencias de Karma y Jasmine del proyecto
- instalar Jest en dependencias de desarrollo del proyecto
- eliminar sección "test" en archivo de configuracion angular.json
- eliminar archivos src/test.ts y karma.config.ts
- configurar package.json
En rigor, los test unitarios deben probar unidades y piezas de software individuales y específicas de los componentes, servicios, filtros, etc. del proyecto. El alcance es muy reducido y está perfectamente acotado. Cualquier dependencia del módulo bajo prueba debe ser sustituida por un mock, o un stub.
Los test de integración prueban la interacción entre dos o mas elementos, estos pueden ser módulos, clases, interfaces, servicios, componentes, paquetes, etc. En Angular se utiliza el paqueta TestBed para gestionar e importar los modulos e inyectar las dependencias necesarias.
Ejemplo: prueba unitaria de un componente básico:
counter.component.html
<div class="m-5">
<h1>Counter {{ counter }}</h1>
<hr>
<button class="btn btn-primary mx-1" (click)="increaseBy(+1)">+1</button>
<button class="btn btn-primary mx-1" (click)="increaseBy(-1)">-1</button>
</div>
counter.component.ts
export class CounterComponent {
counter: number = 10;
constructor() { }
increaseBy( value: number ) {
this.counter += value;
}
}
counter.component.spec.ts
describe('CounterComponent', () => {
let component: CounterComponent;
let fixture: ComponentFixture<CounterComponent>;
let compiled: HTMLElement;
beforeEach(() => {
fixture = TestBed.createComponent(CounterComponent);
component = fixture.componentInstance;
fixture.detectChanges();
compiled = fixture.nativeElement;
});
test('should create', () => {
expect(component).toBeTruthy();
});
test('should increment based on argument', () => {
component.increaseBy(2);
expect(component.counter).toBe(12);
});
test('should update tag h1', () => {
component.increaseBy(10);
fixture.detectChanges();
const h1 = compiled.querySelector('h1');
expect( h1?.textContent ).toContain('20');
});
}
- ejecutar tests del proyecto:
npm run test
- ver la cobertura de pruebas del proyecto;
npm run test:coverage
Puedes descargar el código fuente completo de este ejemplo desde el siguiente enlace
¿Tienes alguna consulta?
Puedes contactarme enviándome un mensaje desde aquí.
![](assets/img/posts/2022/post-java-virtual-threads-1.webp)
diciembre 16, 2022 Backend
![](assets/img/posts/2022/raspberry-pi-router-1.jpg)
septiembre 19, 2022 Redes/Networking, Embedded Systems
![](assets/img/posts/2022/keycloak-1.jpg)
julio 20, 2022 Cloud
- Backend(4)
- Redes/Networking(4)
- Embedded Systems(2)
- Cloud(2)
- Frontend(3)
- Microservicios(4)