Tutorial — probar componentes Angular zoneless con Vitest
zone.js para saber cuándo la vista es estable — y tanto mejor para los tests. Se acabaron los fakeAsync / tick esotéricos: se espera explícitamente a que el renderizado se estabilice. Así es como se prueba un componente zoneless con Vitest .
Configurar Vitest
@angular/build:unit-test lanza Vitest sin configuración separada: todo vive en angular.json . El archivo de providers de test activa el modo zoneless de una vez por todas:
Controlar los inputs signal
input() signal, ya no se reasigna una propiedad: se usa componentRef.setInput() , luego se espera la estabilización:
Reemplazar fakeAsync por whenStable
fakeAsync / tick() ya no tienen sentido. La regla es simple: toda espera asíncrona se resuelve con await fixture.whenStable() , que devuelve el control cuando la detección de cambios se ha estabilizado. Es más legible y más cercano al ciclo de vida real.
- ›
antes: tick(); fixture.detectChanges(); - ›
después: await fixture.whenStable();
Probar sin TestBed
computed() o una función pura no necesita TestBed en absoluto: se llama directamente, y el test es instantáneo. Se reserva TestBed para el renderizado real del template. La guía de testing de Angular cubre ambos enfoques.
El zoneless simplifica los tests: ya no se espera a una magia invisible, se espera a una estabilidad explícita . Un test que pasa entonces significa lo que afirma significar.