Tuto — tester des composants Angular zoneless avec Vitest
zone.js pour savoir quand la vue est stable — et c'est tant mieux pour les tests. Fini les fakeAsync / tick ésotériques : on attend explicitement que le rendu se stabilise. Voici comment tester un composant zoneless avec Vitest .
Configurer Vitest
@angular/build:unit-test lance Vitest sans config séparée : tout vit dans angular.json . Le fichier de providers de test active le mode zoneless une fois pour toutes :
Piloter les inputs signal
input() signal, on ne réaffecte plus une propriété : on passe par componentRef.setInput() , puis on attend la stabilisation :
Remplacer fakeAsync par whenStable
fakeAsync / tick() n'ont plus de sens. La règle est simple : toute attente asynchrone se résout par await fixture.whenStable() , qui rend la main quand le change detection s'est stabilisé. C'est plus lisible et plus proche du vrai cycle de vie.
- ›
avant : tick(); fixture.detectChanges(); - ›
après : await fixture.whenStable();
Tester sans TestBed
computed() ou une fonction pure n'a pas besoin de TestBed du tout : on l'appelle directement, et le test est instantané. On réserve TestBed au rendu réel du template. Le guide de test Angular couvre les deux approches.
Le zoneless simplifie les tests : on n'attend plus une magie invisible, on attend une stabilité explicite . Un test qui passe veut alors dire ce qu'il prétend dire.