Snapshot
Apprenez les Snapshots par vidéo sur Vue School
Les tests par snapshot sont un outil très utile chaque fois que vous souhaitez vous assurer que la sortie de vos fonctions ne change pas de manière inattendue.
Lors de l’utilisation d’un snapshot, Vitest prend un instantané de la valeur donnée, puis le compare à un fichier de snapshot de référence stocké aux côtés du test. Le test échouera si les deux snapshots ne correspondent pas : soit le changement est inattendu, soit le snapshot de référence doit être mis à jour avec la nouvelle version du résultat.
Utiliser les Snapshots
Pour prendre un instantané d’une valeur, vous pouvez utiliser toMatchSnapshot()
de l’API expect()
:
La première fois que ce test est exécuté, Vitest crée un fichier de snapshot qui ressemble à ceci :
L’artéfact du snapshot doit être engagé aux côtés des changements de code et examiné dans le cadre de votre processus de révision de code. Lors des exécutions de test suivantes, Vitest comparera la sortie rendue avec le snapshot précédent. S’ils correspondent, le test réussira. S’ils ne correspondent pas, soit le coureur de tests a trouvé un bug dans votre code qui doit être corrigé, soit l’implémentation a changé et le snapshot doit être mis à jour.
Snapshots en Ligne
De même, vous pouvez utiliser toMatchInlineSnapshot()
pour stocker le snapshot en ligne dans le fichier de test.
Au lieu de créer un fichier de snapshot, Vitest modifiera directement le fichier de test pour mettre à jour le snapshot sous forme de chaîne :
Cela vous permet de voir la sortie attendue directement sans sauter entre différents fichiers.
Mise à Jour des Snapshots
Lorsque la valeur reçue ne correspond pas au snapshot, le test échoue et vous montre la différence entre eux. Lorsque le changement de snapshot est attendu, vous pouvez vouloir mettre à jour le snapshot à partir de l’état actuel.
En mode watch, vous pouvez appuyer sur la touche u
dans le terminal pour mettre à jour directement le snapshot échoué.
Vous pouvez également utiliser le flag --update
ou -u
dans la CLI pour faire mettre à jour les snapshots par Vitest.
Snapshots de Fichier
Lors de l’appel de toMatchSnapshot()
, nous stockons tous les snapshots dans un fichier de snap formaté. Cela signifie que nous devons échapper certains caractères (à savoir les guillemets doubles "
et les accents graves `
) dans la chaîne du snapshot. En attendant, vous pourriez perdre la coloration syntaxique pour le contenu du snapshot (s’ils sont dans un certain langage).
Dans cette optique, nous avons introduit toMatchFileSnapshot()
pour correspondre explicitement à un fichier. Cela vous permet d’attribuer n’importe quelle extension de fichier au fichier de snapshot et le rend plus lisible.
Il comparera avec le contenu de ./test/basic.output.html
. Et peut être réécrit avec le flag --update
.
Snapshots d’Image
Il est également possible de prendre des snapshots d’images en utilisant jest-image-snapshot
.
Sérialiseur Personnalisé
Vous pouvez ajouter votre propre logique pour modifier la façon dont vos snapshots sont sérialisés. Comme Jest, Vitest a des sérialiseurs par défaut pour les types JavaScript intégrés, les éléments HTML, ImmutableJS et pour les éléments React.
Vous pouvez explicitement ajouter un sérialiseur personnalisé en utilisant l’API expect.addSnapshotSerializer
.
Nous supportons également l’option snapshotSerializers pour ajouter implicitement des sérialiseurs personnalisés.
Après avoir ajouté un test comme celui-ci :
Vous obtiendrez le snapshot suivant :
Nous utilisons pretty-format
de Jest pour sérialiser les snapshots. Vous pouvez en lire davantage ici : pretty-format.
Différence avec Jest
Vitest fournit une fonction de snapshot presque compatible avec Jest avec quelques exceptions :
1. L’en-tête de commentaire dans le fichier de snapshot est différent
Cela n’affecte pas vraiment la fonctionnalité, mais pourrait affecter votre différence de commit lors de la migration de Jest.
2. printBasicPrototype
est par défaut false
Les snapshots de Jest et Vitest sont alimentés par pretty-format
. Dans Vitest, nous avons défini printBasicPrototype
par défaut à false
pour fournir une sortie de snapshot plus claire, tandis que dans Jest <29.0.0, c’est true
par défaut.
Nous croyons que c’est un paramètre par défaut plus raisonnable pour la lisibilité et l’expérience globale du développeur. Si vous préférez toujours le comportement de Jest, vous pouvez changer votre configuration :
3. Le chevron >
est utilisé comme séparateur au lieu des deux-points :
pour les messages personnalisés
Vitest utilise le chevron >
comme séparateur plutôt que le deux-points :
pour la lisibilité, lorsqu’un message personnalisé est passé lors de la création d’un fichier de snapshot.
Pour le code de test d’exemple suivant :
Dans Jest, le snapshot sera :
Dans Vitest, le snapshot équivalent sera :