Fiche 14.02 — Tester un ViewModel
Objectif
Savoir tester un ViewModel SwiftUI sans lancer l’interface.
C’est une compétence très utile en entretien, car elle montre que ton architecture est propre et testable.
1. ViewModel à tester
Exemple simple de ViewModel de login :
2. Tester la validation
@MainActor est utile si ton ViewModel est aussi @MainActor.
3. Tester les états d’écran (et l’asynchrone, pour de vrai)
Un ViewModel réel expose souvent un état… et charge ses données de façon asynchrone. C’est exactement ça qu’il faut tester.
⚠️ Piège du faux test : si le ViewModel est synchrone…
…alors le test associé donne une fausse confiance : il ne vérifie jamais l’asynchronisme, ni l’état .loading, ni la branche d’erreur. En vrai, un chargement dépend d’un service et peut échouer. On injecte donc une dépendance et on rend la méthode async :
Mock contrôlable (succès ou échec) :
Tests : on vérifie l’état de départ, le succès, et surtout la branche d’erreur (que le faux test synchrone ne couvrait jamais) :
Astuce : pour vérifier aussi le passage par
.loading, on peut enregistrer la suite des états via un spy ouwithObservationTracking. L’essentiel : tester les deux branches (succès et erreur), pas seulement le happy-path.
4. Tester avec un service mock
ViewModel :
Mock :
Test :
Résumé
- Un ViewModel se teste sans afficher l’UI.
- On teste les champs calculés, les erreurs et les états.
- Les dépendances doivent être injectées pour pouvoir utiliser des mocks.
- Les tests de ViewModel prouvent que ton MVVM est propre.