Cours 13 - Tests avec Vitest
Table des matières
Objectifs
- Être en mesure d'intégrer Vitest avec Vue.js
- Être capable d'utiliser les tests unitaires dans Vue.js
- Comprendre le concept de tests unitaires dans Vue.js
Déroulement
- Introduction au cours
- Répondre au sondage suivant: https://forms.office.com/r/txZQYajbZZ
- Introduction aux tests unitaires
- Atelier 13 - Tests avec Vitest
- Conclusion
- Note de cours: Instructions asynchrones
Introduction aux tests unitaires
- Imaginez que vous construisez une maison, pièce par pièce.
- Avant d'assembler ces pièces pour créer la maison entière, vous voulez vous assurer que chaque pièce est solide, bien construite, et fonctionne comme prévu.
- Dans le monde du développement web, c'est là qu'interviennent les tests unitaires.
Les tests unitaires, c'est un peu comme inspecter chaque brique, chaque porte, ou chaque fenêtre avant de construire la maison. Pour une application Vue.js, cela signifie tester les petits morceaux de code, comme les composants, pour s'assurer qu'ils font exactement ce pour quoi ils sont conçus. Cela permet de repérer rapidement les problèmes avant qu'ils ne deviennent plus complexes et plus coûteux à résoudre!
Pourquoi sont-ils importants ?
- Détection précoce des bogues : Il est plus facile et moins coûteux de corriger un bogue dans un petit morceau de code qu'après que ce code ait été intégré dans le reste de l'application.
- Simplification du débogage : Si un test unitaire échoue, vous savez exactement où chercher le problème.
- Documentation du code : Les tests unitaires fournissent une documentation vivante de votre code. Ils montrent clairement comment un morceau de code est censé être utilisé.
- Facilitation des changements : Lorsque vous modifiez ou mettez à jour votre code, les tests unitaires peuvent vous aider à vérifier que vous n'avez pas introduit de nouveaux bogues.
Et Vitest dans tout ça ?
Vitest est un framework de tests moderne pour JavaScript, optimisé pour Vue.js (et d'autres frameworks). Il s'intègre bien avec Vue.js et offre des fonctionnalités spécifiques pour tester efficacement les composants Vue. Avec Vitest, vous pouvez simuler le comportement des utilisateurs, comme cliquer sur un bouton ou entrer du texte, et vérifier que votre composant réagit comme prévu. C'est un outil puissant pour écrire, exécuter, et organiser vos tests unitaires, rendant le processus rapide et efficace.
Vitest vous aide à mettre en œuvre cette pratique de manière efficace, en vous fournissant les outils nécessaires pour tester vos composants Vue.js de manière isolée, rapide, et fiable.
Atelier 13 - Tests avec Vitest
Prérequis
Vidéo de présentation
Using Vue Test Utils in Vitest
À lire et consulter
Documentation officielle de Vitest
Très semblable à Jest, si vous en entendez parler.
- Allez lire la comparaison Jest / Vitest pour vous faire une idée!
Une nouvelle extension de VS Code à installer
- Nom : Vitest
- ID : vitest.explorer
- Description : A Vite-native testing framework. It's fast!
- Version : 1.16.0
- Serveur de publication : Vitest
- Lien de la Place de marché pour VS : https://marketplace.visualstudio.com/items?itemName=vitest.explorer
Installation de Vitest
Pour installer Vitest, consulter le guide:
https://vitest.dev/guide/
Vidéo à écouter:
https://vueschool.io/lessons/how-to-install-vitest?friend=vueuse
Pour installer Vitest à partir de zéro
Dans un répertoire nommé atel13, écrivez la commande suivante:
Commande NPM
npm init vue@3
Questions à répondre:
- nom du projet: vitest-demo
Sélectionnez les fonctionnalités à inclure dans votre projet : (↑/↓ pour naviguer,
espace pour sélectionner, a pour tout sélectionner, entrée pour confirmer)
- Cochez TypeScript (IMPORTANT)
- Cochez Vitest pour les tests unitaires (IMPORTANT)
- Décochez tout le reste
Ensuite, faire les commandes proposées à l'écran
Voilà une nouvelle manière de faire un projet avec Vue 3 en incluant les tests et d'autres fonctionnalités que l'on va voir plus tard
(store, route, etc.)
package.json
Aller voir le fichier package.json pour voir l'ajout de la librairie de tests
"test:unit": "vitest",
Astuce: si ça ne vous tente pas d'écrire npm run test:unit à chaque fois, renommer le script:
"test": "vitest",
Sauvegarder le fichier!
Utilisation de Vitest
Maintenant, on va utiliser la bête ;)
- À partir de votre dossier vitest-demo
Vitest a deux manières de reconnaître un fichier de test:
- composant.spec.ts
- composant.test.ts
Dans l'exemple installé, le test se nomme HelloWorld.spec.ts et il est dans un dossier nommé
test dans le dossier components
Dans le terminal de notre projet:
Commande NPM
npm run test
Vous devriez voir un test passer!
Allez voir le contenu de HelloWorld.spec.ts
La documentation de Vitest vous indique comment écrire un test:
https://vitest.dev/guide/#writing-tests
Il faut impérativement importer le composant que l'on veut tester!
import HelloWorld from '../HelloWorld.vue'
Si vous avez bien installé l'extension proposée, vous pourrez rouler les tests de manière individuelle:
Exercice supplémentaire
- Faites l'intégration de Vitest dans le projet existant: faq01
- Fichiers à utiliser: faq01.zip
À partir d'un projet existant
Pour ajouter Vitest à un projet existant, suivre cette procédure, car celle dans les vidéos n'est pas parfaite :P
Commande NPM
npm install -D vitest
npm install -D @vue/test-utils@latest
npm install -D jsdom
npm install -D @types/jsdom
Note: -D veut dire pour développement seulement
Dans le fichier package.json, ajouter la ligne suivante dans la section scripts
"test": "vitest"
"scripts": {
"dev": "vite",
"build": "vue-tsc && vite build",
"preview": "vite preview",
"test": "vitest"
},
IMPORTANT: N'oubliez pas la virgule de la ligne: "preview": "vite preview",
Finalement, ouf, il faut déposer un fichier de configuration dézippé de Vitest, à la racine de votre projet:
vitest.config.zip
Dans vos tests, n'oubliez pas d'importer, les éléments de test et le composant à tester:
import { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
import ChildComponent from '../ChildComponent.vue'
Ensuite:
- Faites un test de composant simple ChildComponent en vous servant de l'exemple fait précédemment et de la documentation
- Le test doit fonctionner!
- EXPERT: faite le test suivant: Sur le clic du bouton, doit émettre l'événement update
- Vous pouvez me montrer que ça marche, mais rien à remettre!