diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 6d85f4b55..3f77b27a0 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -1,6 +1,5 @@ import { defineConfig } from 'vitepress'; import { frLocaleConfig } from "../fr/.vitepress/locale-config"; -import packageJSON from '../../package.json'; export default defineConfig({ title: `Vue Test Utils`, @@ -15,7 +14,7 @@ export default defineConfig({ label: "Français", title: "Vue Test Utils", lang: "fr-FR", - description: "La librairie officielle de Vue Test Utils", + description: "La documentation officielle de Vue Test Utils", }, }, head: [['link', { rel: 'icon', href: `/logo.png` }]], @@ -131,5 +130,97 @@ export default defineConfig({ facetFilters: ['tags:next'] } }, + nav: [ + { text: 'Guide', link: '/guide/' }, + { text: 'API Reference', link: '/api/' }, + { text: 'Migrating from Vue 2', link: '/migration/' }, + { + text: 'Changelog', + link: 'https://github.com/vuejs/test-utils/releases' + } + ], + sidebar: [ + { + text: 'Installation', + link: '/installation/' + }, + { + text: 'Essentials', + collapsable: false, + children: [ + { text: 'Getting Started', link: '/guide/' }, + { text: 'A Crash Course', link: '/guide/essentials/a-crash-course' }, + { + text: 'Conditional Rendering', + link: '/guide/essentials/conditional-rendering' + }, + { + text: 'Testing Emitted Events', + link: '/guide/essentials/event-handling' + }, + { text: 'Testing Forms', link: '/guide/essentials/forms' }, + { + text: 'Passing Data to Components', + link: '/guide/essentials/passing-data' + }, + { + text: 'Write components that are easy to test', + link: '/guide/essentials/easy-to-test' + } + ] + }, + { + text: 'Vue Test Utils in depth', + collapsable: false, + children: [ + { text: 'Slots', link: '/guide/advanced/slots' }, + { + text: 'Asynchronous Behavior', + link: '/guide/advanced/async-suspense' + }, + { + text: 'Making HTTP Requests', + link: '/guide/advanced/http-requests' + }, + { text: 'Transitions', link: '/guide/advanced/transitions' }, + { + text: 'Component Instance', + link: '/guide/advanced/component-instance' + }, + { + text: 'Reusability and Composition', + link: '/guide/advanced/reusability-composition' + }, + { text: 'Testing v-model', link: '/guide/advanced/v-model' }, + { text: 'Testing Vuex', link: '/guide/advanced/vuex' }, + { text: 'Testing Vue Router', link: '/guide/advanced/vue-router' }, + { text: 'Testing Teleport', link: '/guide/advanced/teleport' }, + { + text: 'Stubs and Shallow Mount', + link: '/guide/advanced/stubs-shallow-mount' + }, + { text: 'Server-side rendering', link: '/guide/advanced/ssr' } + ] + }, + { + text: 'Extending Vue Test Utils', + collapsable: false, + children: [ + { text: 'Plugins', link: '/guide/extending-vtu/plugins' }, + { + text: 'Community and Learning', + link: '/guide/extending-vtu/community-learning' + } + ] + }, + { + text: 'Migrating from Vue 2', + link: '/migration/' + }, + { + text: 'API Reference', + link: '/api/' + } + ] } }) diff --git a/docs/api/index.md b/docs/api/index.md index d52dd46a3..47d5b7c33 100644 --- a/docs/api/index.md +++ b/docs/api/index.md @@ -1960,11 +1960,11 @@ An example might be globally mocking the `$t` variable from vue-i18n and a compo @@ -1976,12 +1976,12 @@ export default { import { config, mount } from '@vue/test-utils' import { defineComponent } from 'vue' -const MonComposant = defineComponent({ +const MyComponent = defineComponent({ template: `
My component
` }) config.global.stubs = { - MonComposant + MyComponent } config.global.mocks = { diff --git a/docs/fr/.vitepress/locale-config.ts b/docs/fr/.vitepress/locale-config.ts index b7aa6d204..fbecd52eb 100644 --- a/docs/fr/.vitepress/locale-config.ts +++ b/docs/fr/.vitepress/locale-config.ts @@ -71,7 +71,8 @@ const frLocaleConfig: DefaultTheme.LocaleConfig & Omit { @@ -24,7 +24,7 @@ interface MountingOptions { function mount(Component, options?: MountingOptions): VueWrapper ``` -**Utilisation :** +**Utilisation :** `mount` est la méthode principale exposée par Vue Test Utils. Elle crée une application Vue 3 qui contient et rend le composant en cours de test. En retour, il crée un wrapper pour agir et vérifier le comportement du composant. @@ -42,9 +42,9 @@ test('monte un composant', () => { }); ``` -Remarquez que `mount` accepte un second paramètre pour définir l'état (`state`) du composant. +Remarquez que `mount` accepte un second paramètre pour définir l'état du composant. -**Exemple : monter un composant avec des `props` et un plugin Vue** +**Exemple : monter un composant avec des `props` et un plugin Vue** ```js const wrapper = mount(Component, { @@ -59,23 +59,23 @@ const wrapper = mount(Component, { #### options.global -Parmi les états (`states`) du composant, vous pouvez configurer l'application Vue 3 par la propriété de configuration [`MountingOptions.global` config property](#global). Cela peut être utile pour fournir des valeurs simulées que vos composants pourraient avoir besoin. +Parmi les états du composant, vous pouvez configurer l'application Vue 3 par la propriété de configuration [`MountingOptions.global` config property](#global). Cela peut être utile pour fournir des valeurs simulées dont vos composants pourraient avoir besoin. ::: tip -Si vous vous retrouvez à définir une configuration commune de l'application pour de nombreux de vos tests, vous pouvez définir la configuration pour votre ensemble de tests complet à l'aide de l'[objet `config`](#config) exporté. +Si vous vous retrouvez à définir une configuration commune de l'application pour de nombreux tests, vous pouvez définir la configuration pour tous vos tests complet à l'aide de l'[objet `config`](#config) exporté. ::: ### attachTo -Spécifie le nœud pour monter le composant dessus. +Spécifie le nœud où monter le composant. -**Signature :** +**Signature :** ```ts attachTo?: HTMLElement | string ``` -**Utilisation :** +**Utilisation :** Peut être un sélecteur CSS valide ou un [`Element`](https://developer.mozilla.org/fr-FR/docs/Web/API/Element) connecté au document. @@ -118,13 +118,13 @@ test('monte sur un composant spécifique', () => { Définie les attributs HTML d'un composant. -**Signature :** +**Signature :** ```ts attrs?: Record ``` -**Utilisation :** +**Utilisation :** `Component.spec.js`: @@ -147,7 +147,7 @@ test('attrs', () => { }); ``` -Notice that setting a defined prop will always trump an attribute: +Remarquez que définir une propriété remplacera toujours l'attribut : ```js import { mount } from '@vue/test-utils'; @@ -163,7 +163,7 @@ test('l\'attribut est remplacé par la prop éponyme', () => { }, }); - expect(wrapper.props()).toEqual({ message: 'Hello World' }); + expect(wrapper.props()).toEqual({ message: 'Bonjour tout le monde' }); expect(wrapper.attributes()).toEqual({}); }); ``` @@ -172,13 +172,13 @@ test('l\'attribut est remplacé par la prop éponyme', () => { Remplace la `data` par défaut d'un composant. Doit être une fonction. -**Signature :** +**Signature :** ```ts data?: () => {} extends Data ? any : Data extends object ? Partial : any ``` -**Utilisation :** +**Utilisation :** `Component.vue` @@ -221,13 +221,13 @@ test('data', () => { Définie les `props` d'un composant lorsqu'il est monté. -**Signature :** +**Signature :** ```ts props?: (RawProps & Props) | ({} extends Props ? null : never) ``` -**Utilisation :** +**Utilisation :** `Component.vue`: @@ -269,7 +269,7 @@ test('props', () => { Définie les valeurs des slots sur un composant. -**Signature :** +**Signature :** ```ts type Slot = VNode | string | { render: Function } | Function | Component @@ -277,9 +277,9 @@ type Slot = VNode | string | { render: Function } | Function | Component slots?: { [key: string]: Slot } & { default?: Slot } ``` -**Utilisation :** +**Utilisation :** -Les `slots` peuvent être une `string` ou toute définition de composant valide importée d'un fichier `.vue` ou directement fourni. +Les `slots` peuvent être une `string` ou toute définition de composant valide importée d'un fichier `.vue` ou directement fournie. `Component.vue`: @@ -322,7 +322,7 @@ test('affiche le contenu du slot', () => { ### global -**Signature :** +**Signature :** ```ts type GlobalMountOptions = { @@ -338,19 +338,19 @@ type GlobalMountOptions = { }; ``` -Vous pouvez configurer toutes les options `global` à la fois pour chaque test mais aussi pour l'ensemble des tests. [Voir comment configurer les valeurs par défaut à l'échelle du projet](#config-global). +Vous pouvez configurer toutes les options `global` à la fois pour chaque test, mais aussi pour l'ensemble des tests. [Voir comment configurer les valeurs par défaut à l'échelle du projet](#config-global). #### global.components Enregistre les composants de manière globale pour le composant monté. -**Signature :** +**Signature :** ```ts components?: Record ``` -**Utilisation :** +**Utilisation :** `Component.vue`: @@ -404,7 +404,7 @@ test('global.components', () => { Configure [la configuration globale de l'application Vue](https://v3.vuejs.org/api/application-config.html#application-config). -**Signature :** +**Signature :** ```ts config?: Partial> @@ -412,15 +412,15 @@ config?: Partial> #### global.directives -Enregistre une [directive](https://v3.vuejs.org/api/directives.html#directives) de manière globale pour le composant monté. +Enregistre une [directive](https://v3.vuejs.org/api/directives.html#directives) de manière globale pour le composant monté. -**Signature :** +**Signature :** ```ts directives?: Record ``` -**Utilisation :** +**Utilisation :** `Component.spec.js`: @@ -448,13 +448,13 @@ test('global.directives', () => { Enregistre un [mixin](https://v3.vuejs.org/guide/mixins.html) de manière globale pour le composant monté. -**Signature :** +**Signature :** ```ts mixins?: ComponentOptions[] ``` -**Utilisation :** +**Utilisation :** `Component.spec.js`: @@ -475,13 +475,13 @@ test('global.mixins', () => { Simule une propriété d'instance globale. Peut être utilisé pour simuler `this.$store`, `this.$router`, etc. -**Signature :** +**Signature :** ```ts mocks?: Record ``` -**Utilisation :** +**Utilisation :** ::: warning Ceci est conçu pour simuler des variables injectées par des plugins tiers, pas les propriétés natives de Vue telles que `$root`, `$children`, etc. @@ -534,13 +534,13 @@ test('global.mocks', async () => { Installe des plugins sur le composant monté. -**Signature :** +**Signature :** ```ts plugins?: (Plugin | [Plugin, ...any[]])[] ``` -**Utilisation :** +**Utilisation :** `Component.spec.js`: @@ -578,21 +578,21 @@ test('global.plugins avec options', () => { #### global.provide -Fournit de la data à destination de la fonction `setup` via `inject`. +Fournit des données utilisables dans la fonction `setup` via `inject`. -**Signature :** +**Signature :** ```ts provide?: Record ``` -**Utilisation :** +**Utilisation :** `Component.vue`: ```vue ``` -Le test sera : +Le test sera : ```typescript -test('fournir de la donnée correcte', () => { +test('fournit de la donnée correcte', () => { const TestComponent = defineComponent({ template: '{{value}}', setup () { @@ -180,7 +180,7 @@ const value = inject('ma-clef'); ``` -Le test unitaire devrait ressembler à ça : +Le test unitaire devrait ressembler à ça : ```typescript test('affiche de la donnée correcte', () => { @@ -192,7 +192,7 @@ test('affiche de la donnée correcte', () => { }, }); - expect(wrapper.text()).toBe('some-data'); + expect(wrapper.text()).toBe('données'); }); ``` diff --git a/docs/fr/guide/advanced/slots.md b/docs/fr/guide/advanced/slots.md index 93f405ab5..970f52afa 100644 --- a/docs/fr/guide/advanced/slots.md +++ b/docs/fr/guide/advanced/slots.md @@ -4,7 +4,7 @@ Vue Test Utils offre des fonctionnalités utiles pour tester les composants qui ## Un exemple simple -Vous pourriez avoir un composant `` générique qui utilise un `slot` par défaut pour afficher du contenu. Par exemple : +Vous pourriez avoir un composant `` générique qui utilise un `slot` par défaut pour afficher du contenu. Par exemple : ```js const Layout = { @@ -18,8 +18,8 @@ const Layout = { Merci de votre visite. - ` -} + `, +}; ``` Vous pourriez vouloir écrire un test pour vous assurer que le contenu du `slot` par défaut est bien affiché. VTU fournit l'option de `mount()`: `slots`. @@ -36,7 +36,7 @@ test('affiche le slot par défaut', () => { }); ``` -Le test passe ! Dans cet exemple, nous transmettons du contenu texte au `slot` par défaut. Si vous voulez être encore plus spécifique et vérifier que le contenu du `slot` par défaut est rendu à l'intérieur de `
`, vous pourriez changer la vérification : +Le test passe ! Dans cet exemple, nous transmettons du texte au `slot` par défaut. Si vous voulez être encore plus spécifique et vérifier que le contenu du `slot` par défaut est rendu à l'intérieur de `
`, vous pourriez changer la vérification : ```js test('affiche le slot par défaut', () => { @@ -52,7 +52,7 @@ test('affiche le slot par défaut', () => { ## Slots Nommés -Vous pourriez avoir un composant `` plus complexe avec certains `slots` nommés. Par exemple : +Vous pourriez avoir un composant `` plus complexe avec certains `slots` nommés. Par exemple : ```js const Layout = { @@ -93,7 +93,7 @@ test('affiche tous les slots', () => { ## Slots Multiples -Vous pouvez aussi passer un tableau de `slots` : +Vous pouvez aussi passer un tableau de `slots` : ```js test('affiche la page', () => { @@ -113,7 +113,7 @@ test('affiche la page', () => { ## Utilisation avancée -Vous pouvez également passer une fonction de rendu, un objet avec un `template` ou même un composant importé à partir d'un fichier `vue` à la fonction `mount`, dans les options de `slots` : +Vous pouvez également passer une fonction de rendu, un objet avec un `template` ou même un composant importé à partir d'un fichier `vue` à la fonction `mount`, dans les options de `slots` : ```js import { h } from 'vue'; @@ -126,8 +126,8 @@ test('affiche la page entière', () => { main: h('div', 'Contenu principal'), sidebar: { template: '
Barre latérale
' }, footer: '
Pied de page
', - } - }) + }, + }); expect(wrapper.html()).toContain('
Haut de page
'); expect(wrapper.html()).toContain('
Contenu principal
'); @@ -139,7 +139,7 @@ test('affiche la page entière', () => { ## Slots à portée limitée (Scoped Slots) -[Les slots à portée limitée](https://v3.vuejs.org/guide/component-slots.html#scoped-slots) et les `bindings` sont aussi supportés par VTU. +[Les slots à portée limitée](https://v3.vuejs.org/guide/component-slots.html#scoped-slots) et les liaisons de données (`bindings`) sont aussi supportés par VTU. ```js const ComponentWithSlots = { @@ -185,7 +185,7 @@ test('slot à portée limitée', () => { ## Conclusion -- Utilisez l'option de `mount()` : `slots` pour tester que les composants utilisant `` affiche correctement le contenu. +- Utilisez l'option de `mount()` : `slots` pour tester que les composants utilisant `` affiche correctement le contenu. - Le contenu peut être une `string`, une fonction de rendu ou un composant Vue importé. - Utilisez `default` pour le `slot` par défaut et le nom exact pour les `slots` nommés. - Les `slots` à portée limitée et le raccourci `#` sont également pris en charge. diff --git a/docs/fr/guide/advanced/ssr.md b/docs/fr/guide/advanced/ssr.md new file mode 100644 index 000000000..f29a13d29 --- /dev/null +++ b/docs/fr/guide/advanced/ssr.md @@ -0,0 +1,43 @@ +# Tester le Rendu côté Serveur (SSR) + +Vue Test Utils fournit `renderToString` pour tester des applications Vue qui utilisent le rendu côté serveur (SSR). + +Cet article vous guidera à travers le processus de test d'une application Vue qui utilise le SSR. + +## `renderToString` + +`renderToString` est une fonction qui affiche un composant Vue sous forme de chaîne de caractères. + +C'est une fonction asynchrone qui renvoie une `Promise`, et accepte les mêmes paramètres que `mount` ou `shallowMount`. + +Prenons en exemple un composant simple qui utilise le `hook` `onServerPrefetch` : + +```ts +function fakeFetch(text: string) { + return Promise.resolve(text); +} + +const Component = defineComponent({ + template: '
{{ text }}
', + setup() { + const text = ref(null); + + onServerPrefetch(async () => { + text.value = await fakeFetch('onServerPrefetch'); + }); + + return { text }; + }, +}); +``` + +Vous pouvez écrire un test pour ce composant en utilisant `renderToString` : + +```ts +import { renderToString } from '@vue/test-utils'; + +it('affiche la valeur retournée par onServerPrefetch', async () => { + const contents = await renderToString(Component); + expect(contents).toBe('
onServerPrefetch
'); +}); +``` diff --git a/docs/fr/guide/advanced/stubs-shallow-mount.md b/docs/fr/guide/advanced/stubs-shallow-mount.md index 77e5cfabd..dfc202c74 100644 --- a/docs/fr/guide/advanced/stubs-shallow-mount.md +++ b/docs/fr/guide/advanced/stubs-shallow-mount.md @@ -2,7 +2,7 @@ Vue Test Utils offre certaines fonctionnalités avancées pour substituer (`stubbing`) les composants et les directives. La substitution consiste à remplacer l'implémentation existante d'un composant ou d'une directive personnalisé par une version fictive qui ne fait rien du tout, ce qui peut simplifier un test complexe. Voyons un exemple. -## Substituer un Seul Composant Enfant +## Substituer un seul composant enfant Un exemple courant est lorsque vous souhaitez tester un comportement dans un composant qui apparaît très haut dans la hiérarchie des composants. @@ -36,7 +36,7 @@ const App = { }; ``` -Nous ne voulons pas effectuer l'appel API dans ce test en particulier, nous voulons simplement vérifier que le message est affiché. Dans ce cas, nous pourrions utiliser les `stubs`, qui apparaissent dans l'option de `mount` : `global`. +Nous ne voulons pas effectuer l'appel API dans ce test en particulier, nous désirons simplement vérifier que le message est affiché. Dans ce cas, nous pourrions utiliser les `stubs`, qui apparaissent dans l'option de `mount` : `global`. ```js test('substitue le composant avec un template personnalisé', () => { @@ -57,9 +57,9 @@ test('substitue le composant avec un template personnalisé', () => { }); ``` -Remarquez comment le template affiche `` à la place de `` ? Nous l'avons substitué par un `stub` - dans ce cas, nous avons fourni notre propre implémentation en passant un `template`. +Remarquez comment le template affiche `` à la place de `` ? Nous l'avons substitué par un `stub` - dans ce cas, nous avons fourni notre propre implémentation en passant un `template`. -Vous pouvez également avoir un `stub` par défaut, plutôt que fournir le vôtre : +Vous pouvez également avoir un `stub` par défaut, plutôt que fournir le vôtre : ```js test('subtitue le composant', () => { @@ -81,15 +81,15 @@ test('subtitue le composant', () => { }); ``` -Cela remplacera tous les composants `` dans l'ensemble de l'arbre de rendu, peu importe le niveau où ils apparaissent. C'est pourquoi il se trouve dans les options de `mount` : `global`. +Cela remplacera tous les composants `` dans l'ensemble de l'arbre de rendu, peu importe le niveau où ils apparaissent. C'est pourquoi il se trouve dans les options de `mount` : `global`. ::: tip -Pour substituer, vous pouvez utiliser la clé dans `components` ou le nom de votre composant. Si les deux sont donnés dans `global.stubs`, la clé sera utilisée en premier. +Pour substituer, vous pouvez utiliser la clé dans `components` ou le nom de votre composant. Si les deux sont donnés dans `global.stubs`, la clé sera utilisée en priorité. ::: -## Substituer tous les Composants Enfants +## Substituer tous les composants enfants -Parfois, vous pourriez vouloir substituer *tous* les composants personnalisés. Par exemple, vous pourriez avoir un composant comme ceci : +Parfois, vous pourriez vouloir substituer *tous* les composants enfants. Par exemple, vous pourriez avoir un composant comme ceci : ```js const ComplexComponent = { @@ -99,11 +99,11 @@ const ComplexComponent = { - ` + `, }; ``` -Imaginez que chacun des `` fasse quelque chose de compliqué, et que vous soyez seulement intéressé par le test de rendu du bon message de `

`. Vous pourriez faire quelque chose comme ceci : +Imaginez que chacun des `` fasse quelque chose de compliqué, et que vous soyez seulement intéressé par le test de rendu du bon message de `

`. Vous pourriez faire quelque chose comme suit : ```js const wrapper = mount(ComplexComponent, { @@ -117,7 +117,7 @@ const wrapper = mount(ComplexComponent, { }); ``` -Mais c'est beaucoup de code répétitif. VTU a une option `mount` : `shallow` qui substituera automatiquement tous les composants enfants : +Mais c'est beaucoup de code répétitif. VTU a une option `mount` : `shallow` qui substituera automatiquement tous les composants enfants : ```js {3} test('substitue tous les composants enfants', () => { @@ -139,13 +139,13 @@ test('substitue tous les composants enfants', () => { Si vous avez utilisé VTU V1, cela vous rappelle sûrement `shallowMount`. Cette méthode est également toujours disponible, c'est la même chose que d'écrire `shallow: true`. ::: -## Substituer tous les Composants Enfants avec des Exceptions +## Substituer tous les composants enfants avec des exceptions -Parfois, vous voulez remplacer *tous* les composants personnalisés, sauf un en particulier. Voyons un exemple : +Parfois, vous voulez remplacer *tous* les composants personnalisés, sauf un en particulier. Voyons un exemple : ```js const ComplexA = { - template: '

Salutation d\'un composant réel !

' + template: '

Salutation d\'un composant réel !

', }; const ComplexComponent = { @@ -159,7 +159,7 @@ const ComplexComponent = { }; ``` -En utilisant l'option de `mount` : `shallow`, nous substituons automatiquement tous les composants enfants. Si nous voulons explicitement empêcher la substitution d'un composant spécifique, nous pouvons fournir son nom dans `stubs` avec une valeur définie sur `false`. +En utilisant l'option de `mount` : `shallow`, nous substituons automatiquement tous les composants enfants. Si nous voulons explicitement empêcher la substitution d'un composant spécifique, nous pouvons fournir son nom dans `stubs` avec une valeur définie sur `false`. ```js {3} test('l\'option shallow permet de subsituter tous les composants enfants sauf ceux dans stubs', () => { @@ -182,7 +182,7 @@ test('l\'option shallow permet de subsituter tous les composants enfants sauf ce ## Substituer un Composant Asynchrone -Si vous voulez substituer un composant asynchrone, il existe deux comportements à prendre en compte. Par exemple, vous pourriez avoir des composants de ce genre : +Si vous voulez substituer un composant asynchrone, il existe deux comportements à prendre en compte. Par exemple, vous pourriez avoir des composants de ce genre : ```js // AsyncComponent.js @@ -222,7 +222,7 @@ Le second comportement consiste à utiliser le nom du composant asynchrone. Dans Maintenant, il est nécessaire d'utiliser `async/await`, car le composant asynchrone doit être résolu et peut alors être remplacé par le nom défini dans le composant asynchrone. -**Assurez-vous de définir un nom dans votre composant asynchrone !** +**Assurez-vous de définir un nom dans votre composant asynchrone !** ```js test('substitue le composant asynchrone avec résolution', async () => { @@ -242,9 +242,9 @@ test('substitue le composant asynchrone avec résolution', async () => { ## Substituer une directive -Parfois, les directives effectuent des opérations assez complexes, comme réaliser beaucoup de manipulation de DOM ce qui peut entraîner des erreurs dans vos tests (en raison de JSDOM ne ressemblant pas au comportement entier du DOM). Un exemple courant sont les directives de tooltip de différentes bibliothèques, qui dépendent généralement fortement de la mesure de la position/taille des nœuds DOM. +Parfois, les directives effectuent des opérations assez complexes, comme réaliser beaucoup de manipulations de DOM ce qui peut entraîner des erreurs dans vos tests (en raison du JsDOM ne ressemblant pas totalement au DOM). Un exemple courant sont les directives de tooltip de différentes bibliothèques, qui dépendent généralement fortement de la mesure de la position/taille des nœuds DOM. -Dans cet exemple, nous avons un autre `` qui rend un message dans une infobulle. +Dans cet exemple, nous avons un autre `` qui affiche un message dans une infobulle. ```js // directive tooltip déclarée quelque part nommée `Tooltip` @@ -257,7 +257,7 @@ const App = { }; ``` -Nous ne voulons pas que le code de la directive `Tooltip` soit exécuté dans ce test, nous voulons simplement vérifier que le message est affiché. Dans ce cas, nous pourrions utiliser les `stubs`, qui apparaissent dans l'option de `mount` : `global` en passant `vTooltip`. +Nous ne voulons pas que le code de la directive `Tooltip` soit exécuté dans ce test, nous souhaitons simplement vérifier que le message est affiché. Dans ce cas, nous pourrions utiliser les `stubs`, qui apparaissent dans l'option de `mount` : `global` en passant `vTooltip`. ```js test('substitue le composant avec un template personnalisé', () => { @@ -300,21 +300,21 @@ test('substitue le composant avec un template personnalisé', () => { // 'directive appelée' affiché dans la console console.log(wrapper.html()); - //

Bienvenue dans Vue.js 3

+ //

Bienvenue dans Vue.js 3

- expect(wrapper.classes('with-tooltip')).toBe(true); + expect(wrapper.classes('avec-tooltip')).toBe(true); }); ``` -Nous venons juste d'échanger notre implémentation de directive avec la nôtre ! +Nous venons juste d'échanger notre implémentation de directive avec la nôtre ! ::: warning -Le remplacement des directives ne fonctionnera pas sur les composants fonctionnels ou ` ``` ## Le premier test - une tâche est affichée -Le premier test que nous allons écrire va vérifier qu'une tâche est affichée. Regardons d'abord le test, puis nous détaillerons chaque partie : +Le premier test que nous allons écrire va vérifier qu'une tâche est affichée. Regardons d'abord le test, puis nous détaillerons chaque partie : ```js import { mount } from '@vue/test-utils'; @@ -52,17 +52,17 @@ test('affiche une tâche', () => { }); ``` -Nous commençons par importer `mount` - c'est la principale manière de monter un composant dans VTU. Vous pouvez déclarer un test en utilisant la fonction `test` accompagné d'une courte description pour le test. Les fonctions `test` et `expect` sont disponibles de façon globale dans la plupart des runners de test (cet exemple utilise [Jest](https://jestjs.io/fr/)). Si `test` et `expect` sont des concepts obscurs pour vous, la documentation de Jest a un [exemple plus simple](https://jestjs.io/docs/en/getting-started) de leur utilisation et de leur fonctionnement. +Nous commençons par importer `mount` - c'est la principale manière de monter un composant dans VTU. Vous pouvez déclarer un test en utilisant la fonction `test` accompagné d'une courte description pour le test. Les fonctions `test` et `expect` sont disponibles de façon globale dans la plupart des gestionnaires de tests (cet exemple utilise [Jest](https://jestjs.io/fr/)). Si `test` et `expect` sont des concepts obscurs pour vous, la documentation de Jest a un [exemple plus simple](https://jestjs.io/docs/en/getting-started) de leur utilisation et de leur fonctionnement. -Ensuite, nous appelons `mount` et passons le composant en premier argument - c'est quelque chose que la plupart des tests que vous écrirez auront besoin au préalable. Par convention, nous attribuons le résultat à une variable appelée `wrapper`, car `mount` fournit une simple "enveloppe" autour de l'application avec des méthodes utiles pour les tests. +Ensuite, nous appelons `mount` et passons le composant en premier argument - c'est quelque chose dont la plupart des tests que vous écrirez auront besoin au préalable. Par convention, nous attribuons le résultat à une variable appelée `wrapper`, car `mount` fournit une "enveloppe" simple autour de l'application avec des méthodes utiles pour les tests. -Enfin, nous utilisons une autre fonction globale courante pour de nombreux runners de tests - Jest inclus - `expect`. L'idée est que nous faisons une vérification, ou une _attente_, que la sortie réelle corresponde à ce que nous pensons qu'elle devrait être. Pour cela, nous cherchons un élément avec le sélecteur `data-test="todo"` - dans le DOM, cela ressemblera à `
...
`. Nous appelons ensuite la méthode `text` pour obtenir le contenu, que nous attendons être `'Apprendre Vue.js 3'`. +Enfin, nous utilisons une autre fonction globale courante pour de nombreux gestionnaires de tests - Jest inclus - `expect`. L'idée est que nous faisons une vérification ou une _attente_, que la sortie réelle corresponde à ce que nous pensons qu'elle devrait être. Pour cela, nous cherchons un élément avec le sélecteur `data-test="todo"` - dans le DOM, cela ressemblera à `
...
`. Nous appelons ensuite la méthode `text` pour obtenir le contenu, que nous attendons être `'Apprendre Vue.js 3'`. -> L'utilisation de sélecteurs `data-test` n'est pas requise, mais peut rendre vos tests plus solides. Les classes et les id ont tendance à changer ou à se déplacer au fur et à mesure que l'application évolue - en utilisant `data-test`, les autres développeurs comprendront que ce sélecteur est réservé pour les tests, et en doit donc pas être modifié. +> L'utilisation de sélecteurs `data-test` n'est pas requise, mais peut rendre vos tests plus solides. Les classes et les id ont tendance à changer ou à se déplacer au fur et à mesure que l'application évolue - en utilisant `data-test`, les autres développeurs comprendront que ce sélecteur est réservé pour les tests, et ne doit donc pas être modifié. ## Pour faire passer le test -Si nous exécutons ce test maintenant, il échouera avec le message d'erreur suivant : `Impossible de trouver [data-test="todo"]`. C'est parce que nous n'affichons aucune tâche, donc l'appel `get()` échoue à renvoyer une enveloppe (rappelez-vous, VTU enveloppe tous les composants et les éléments DOM dans une "enveloppe" avec des méthodes utiles aux tests). Mettez à jour la balise `