Skip to content

Commit 0957015

Browse files
elevatebartMachinisteWeb
authored andcommitted
Traduction de unit-testing-vue-components.md (#124)
* traduction du tutoriel des tests unitaires. * ajout des espaces devant deux points * quelques fixes suite a la premiere revue * Rephasage du premier paragraphe * use @forresst comments
1 parent a1d39db commit 0957015

File tree

1 file changed

+118
-115
lines changed

1 file changed

+118
-115
lines changed
+118-115
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
---
2-
title: Unit Testing Vue Components (EN)
2+
title: Test Unitaire des Composants Vue
33
type: cookbook
44
order: 6
55
---
66

7-
## Base Example
7+
## Exemple de base
88

9-
<p>Cette page est en cours de traduction. Pour nous aider, vous pouvez participer sur <a href="https://github.com/vuejs-fr/vuejs.org" target="_blank">le dépôt GitHub dédié de Vuejs-FR</a>.</p><p>Unit testing is a fundamental part of software development. Unit tests execute the smallest units of code in isolation, in order to increase ease of adding new features and track down bugs. Vue's [single-file components](../guide/single-file-components.html) make it straight forward to write unit tests for components in isolation. This lets you develop new features with confidence you are not breaking existing ones, and helps other developers understand what your component does.</p>
9+
<p>Les tests unitaires sont une étape fondamentale du développement de logiciel. Ces tests permettent d'exécuter chaque unité de code isolée du reste du logiciel. Ils facilitent l'ajout de nouvelles fonctionnalités, la détection et la correction de bugs. Les [composants monofichiers](../guide/single-file-components.html) de Vue rendent ce processus de test relativement facile. Cela vous permet d'ajouter des fonctionnalités sans risquer de casser l'existant. De plus, cela aide les autres développeurs à comprendre votre composant.</p>
1010

11-
This simple example tests whether some text is rendered:
11+
Cet exemple simple vérifie qu'un texte est affiché :
1212

1313
```html
1414
<template>
1515
<div>
1616
<input v-model="username">
17-
<div
17+
<div
1818
v-if="error"
1919
class="error"
2020
>
@@ -35,7 +35,7 @@ export default {
3535
computed: {
3636
error () {
3737
return this.username.trim().length < 7
38-
? 'Please enter a longer username'
38+
? 'Veuillez entrez un nom plus long'
3939
: ''
4040
}
4141
}
@@ -44,74 +44,74 @@ export default {
4444
```
4545

4646
```js
47-
import { shallow } from '@vue/test-utils'
47+
import { shallow } from "@vue/test-utils";
4848

49-
test('Foo', () => {
49+
test("Foo", () => {
5050
// render the component
51-
const wrapper = shallow(Hello)
51+
const wrapper = shallow(Hello);
5252

5353
// should not allow for `username` less than 7 characters, excludes whitespace
54-
wrapper.setData({ username: ' '.repeat(7) })
54+
wrapper.setData({ username: " ".repeat(7) });
5555

5656
// assert the error is rendered
57-
expect(wrapper.find('.error').exists()).toBe(true)
57+
expect(wrapper.find(".error").exists()).toBe(true);
5858

5959
// update the name to be long enough
6060
wrapper.setData({
61-
username: 'Lachlan'
62-
})
61+
username: "Lachlan"
62+
});
6363

6464
// assert the error has gone away
65-
expect(wrapper.find('.error').exists()).toBe(false)
66-
})
65+
expect(wrapper.find(".error").exists()).toBe(false);
66+
});
6767
```
6868

69-
The above code snippet shows how to test whether an error message is rendered based on the length of the username. It demonstrates the general idea of unit testing Vue components: render the component, and assert that the markup matches the state of the component.
69+
Le code ci-dessus montre comment tester l'apparition d'un message d'erreur si le username n'est pas assez long. Il nous donne une idée de ce en quoi consistent les tests unitaires de composants VueJs : On render le composant, on lui fournit des données, puis on vérifie que le rendu correspond au données.
7070

71-
## Why test?
71+
## Pourquoi tester?
7272

73-
Component unit tests have lots of benefits:
73+
Quelques-un des avantages à tester ses composants :
7474

75-
- Provide documentation on how the component should behave
76-
- Save time over testing manually
77-
- Reduce bugs in new features
78-
- Improve design
79-
- Facilitate refactoring
75+
* Les tests documentent comment le composant doit fonctionner
76+
* Ils évitent d'avoir à re-tester manuellement après chaque changement du code
77+
* Ils réduisent le risque de régression quand on ajoute des fonctionnalités
78+
* Ils améliorent l'architecture du code
79+
* Ils facilitent le refactoring
8080

81-
Automated testing allows large teams of developers to maintain complex codebases.
81+
Dans les équipes où les développeurs sont nombreux, les tests automatiques permettent de maintenir une codebase volumineuse à moindre effort.
8282

83-
#### Getting started
83+
#### Pour commencer
8484

85-
[Vue Test Utils](https://github.com/vuejs/vue-test-utils) is the official library for unit testing Vue components. The [vue-cli](https://github.com/vuejs/vue-cli) `webpack` template comes with either Karma or Jest, both well supported test runners, and there are some [guides](https://vue-test-utils.vuejs.org/en/guides/) in the Vue Test Utils documentation.
85+
Le package officiel pour tester les composants Vue est [Vue Test Utils](https://github.com/vuejs/vue-test-utils). Le template `webpack` pour [vue-cli](https://github.com/vuejs/vue-cli) contient soit Karma soit Jest. Ces deux test runners sont très bien supportés par VueJs. On peut trouver quelques [guides](https://vue-test-utils.vuejs.org/fr/guides/) dans la documentation de Vue Test Utils.
8686

87-
## Real-World Example
87+
## Exemple concret
8888

89-
Unit tests should be:
89+
Un bon test unitaire se doit d'être :
9090

91-
- Fast to run
92-
- Easy to understand
93-
- Only test a _single unit of work_
91+
* Rapide à l'exécution
92+
* Facile à comprendre
93+
* Tester un _seul comportement à la fois_
9494

95-
Let's continue building on the previous example, while introducing the idea of a <a href="https://en.wikipedia.org/wiki/Factory_(object-oriented_programming)">factory function</a> to make our test more compact and readable. The component should:
95+
Reprenons l'exemple précédent, et ajoutons y le concept de <a href="https://en.wikipedia.org/wiki/Factory_(object-oriented_programming)">factory function</a> pour rendre nos tests plus compacts et plus clairs. Le composant devra donc :
9696

97-
- show a 'Welcome to the Vue.js cookbook' greeting.
98-
- prompt the user to enter their username
99-
- display an error if the entered username is less than seven letters
97+
* Afficher un message 'Bienvenue sur le tutoriel VueJs'.
98+
* Demander à l'utilisateur son username
99+
* Afficher une erreur si le username fait moins de 7 caractères
100100

101-
Let's take a look at the component code first:
101+
Voyons d'abord le code du composant :
102102

103103
```html
104104
<template>
105105
<div>
106106
<div class="message">
107107
{{ message }}
108108
</div>
109-
Enter your username: <input v-model="username">
110-
<div
109+
Entrez un username : <input v-model="username">
110+
<div
111111
v-if="error"
112112
class="error"
113113
>
114-
Please enter a username with at least seven letters.
114+
Choisissez un username de plus de 7 characteres.
115115
</div>
116116
</div>
117117
</template>
@@ -122,7 +122,7 @@ export default {
122122
123123
data () {
124124
return {
125-
message: 'Welcome to the Vue.js cookbook',
125+
message: 'Bienvenue sur le tutoriel VueJs',
126126
username: ''
127127
}
128128
},
@@ -136,115 +136,118 @@ export default {
136136
</script>
137137
```
138138

139-
The things that we should test are:
139+
Ce que l'on doit tester :
140140

141-
- is the `message` rendered?
142-
- if `error` is `true`, `<div class="error">` should be present
143-
- if `error` is `false`, `<div class="error">` should not be present
141+
* le `message` est il affiché?
142+
* si `error` est `true`, `<div class="error">` devrait être visible
143+
* si `error` est `false`, `<div class="error">` ne devrait pas être présent
144144

145-
And our first attempt at test:
145+
Et enfin la version naïve de nos tests
146146

147147
```js
148-
import { shallow } from '@vue/test-utils'
149-
150-
describe('Foo', () => {
151-
it('renders a message and responds correctly to user input', () => {
152-
const wrapper = shallow(Foo, {
153-
data: {
154-
message: 'Hello World',
155-
username: ''
156-
}
157-
})
158-
159-
// see if the message renders
160-
expect(wrapper.find('.message').text()).toEqual('Hello World')
161-
162-
// assert the error is rendered
163-
expect(wrapper.find('.error').exists()).toBeTruthy()
164-
165-
// update the `username` and assert error is no longer rendered
166-
wrapper.setData({ username: 'Lachlan' })
167-
expect(wrapper.find('.error').exists()).toBeFalsy()
168-
})
169-
})
148+
import { shallow } from "@vue/test-utils";
149+
150+
describe("Foo", () => {
151+
it("renders a message and responds correctly to user input", () => {
152+
const wrapper = shallow(Foo, {
153+
data: {
154+
message: "Hello World",
155+
username: ""
156+
}
157+
});
158+
159+
// Vérifions que le message est affiché
160+
expect(wrapper.find(".message").text()).toEqual("Hello World");
161+
162+
// Testons que l'erreur est bien renderée
163+
expect(wrapper.find(".error").exists()).toBeTruthy();
164+
165+
// Changeons le `username` et vérifions que l'érreur a disparu
166+
wrapper.setData({ username: "Lachlan" });
167+
expect(wrapper.find(".error").exists()).toBeFalsy();
168+
});
169+
});
170170
```
171171

172-
There are some problems with the above:
172+
Ce premier test n'est pas parfait. On peut y voir plusieurs problèmes :
173173

174-
- a single test is making assertions about different things
175-
- difficult to tell the different states the component can be in, and what should be rendered
174+
* Un seul test vérifie plusieurs comportements
175+
* Difficile de distinguer different statuts et ce qui devrait être affiché
176176

177-
The below example improves the test by:
177+
L'exemple ci-dessous rend ce test un peu meilleur :
178178

179-
- only making one assertion per `it` block
180-
- having short, clear test descriptions
181-
- providing only the minimum data required for the test
182-
- refactoring duplicated logic (creating the `wrapper` and setting the `username` variable) into a factory function
179+
* ne fait qu'un seul test par `it`
180+
* a une description claire et concise de chaque test
181+
* ne fournit que le minimum de données nécessaires au test
182+
* rassemble le code dupliqué (création du `wrapper` et mise à jour du `username`) dans une fonction `factory`
183+
184+
_Test amelioré_ :
183185

184-
*Updated test*:
185186
```js
186-
import { shallow } from '@vue/test-utils'
187-
import Foo from './Foo'
187+
import { shallow } from "@vue/test-utils";
188+
import Foo from "./Foo";
188189

189190
const factory = (values = {}) => {
190191
return shallow(Foo, {
191-
data: { ...values }
192-
})
193-
}
192+
data: { ...values }
193+
});
194+
};
194195

195-
describe('Foo', () => {
196-
it('renders a welcome message', () => {
197-
const wrapper = factory()
196+
describe("Foo", () => {
197+
it("renders a welcome message", () => {
198+
const wrapper = factory();
198199

199-
expect(wrapper.find('.message').text()).toEqual("Welcome to the Vue.js cookbook")
200-
})
200+
expect(wrapper.find(".message").text()).toEqual(
201+
"Welcome to the Vue.js cookbook"
202+
);
203+
});
201204

202-
it('renders an error when username is less than 7 characters', () => {
203-
const wrapper = factory({ username: '' })
205+
it("renders an error when username is less than 7 characters", () => {
206+
const wrapper = factory({ username: "" });
204207

205-
expect(wrapper.find('.error').exists()).toBeTruthy()
206-
})
208+
expect(wrapper.find(".error").exists()).toBeTruthy();
209+
});
207210

208-
it('renders an error when username is whitespace', () => {
209-
const wrapper = factory({ username: ' '.repeat(7) })
211+
it("renders an error when username is whitespace", () => {
212+
const wrapper = factory({ username: " ".repeat(7) });
210213

211-
expect(wrapper.find('.error').exists()).toBeTruthy()
212-
})
214+
expect(wrapper.find(".error").exists()).toBeTruthy();
215+
});
213216

214-
it('does not render an error when username is 7 characters or more', () => {
215-
const wrapper = factory({ username: 'Lachlan' })
217+
it("does not render an error when username is 7 characters or more", () => {
218+
const wrapper = factory({ username: "Lachlan" });
216219

217-
expect(wrapper.find('.error').exists()).toBeFalsy()
218-
})
219-
})
220+
expect(wrapper.find(".error").exists()).toBeFalsy();
221+
});
222+
});
220223
```
221224

222-
Points to note:
225+
À noter :
223226

224-
At the top, we declare the factory function which merges the `values` object into `data` and returns a new `wrapper` instance. This way, we don't need to duplicate `const wrapper = shallow(Foo)` in every test. Another great benefit to this is when more complex components with a method or computed property you might want to mock or stub in every test, you only need to declare it once.
227+
Au début du code, on déclare la fonction `factory` qui prend l'objet `values` et en construit le `data` pour renvoyer une nouvelle instance de `wrapper`. Du coup, plus besoin de dupliquer `const wrapper = shallow(Foo)` dans chaque test. Un autre avantage important: Quand des composants plus complexes vont devoir être testés, le `mock` ou le `stub` d'une méthode ou d'une propriété calculée pourront facilement être mutualisés dans cette `factory`.
225228

226-
## Additional Context
229+
## Pour aller plus loin
227230

228-
The above test is fairly simple, but in practice Vue components often have other behaviors you want to test, such as:
231+
Le test précédent est assez simple. En pratique on souhaitera souvent vérifier d'autres comportements comme :
229232

230-
- making API calls
231-
- committing or dispatching mutations or actions with a `Vuex` store
232-
- testing interaction
233+
* appeler une API
234+
* faire des `commit` ou des `dispatch` de mutations ou d'actions a un store `Vuex`
235+
* tester l'interactivité
233236

234-
There are more complete examples showing such tests in the Vue Test Utils [guides](https://vue-test-utils.vuejs.org/en/guides/).
237+
Plusieurs d'exemples illustrant ce genre de tests sont disponibles dans les [guides](https://vue-test-utils.vuejs.org/fr/guides/) de Vue Test Utils.
235238

236-
Vue Test Utils and the enormous JavaScript ecosystem provides plenty of tooling to facilitate almost 100% test coverage. Unit tests are only one part of the testing pyramid, though. Some other types of tests include e2e (end to end) tests, and snapshot tests. Unit tests are the smallest and most simple of tests - they make assertions on the smallest units of work, isolating each part of a single component.
239+
Vue Test Utils et le gigantesque ecosystème JavaScript fournissant plein d’outils facilitant une couverture de test proche de 100%. Mais les tests unitaires ne sont qu’une partie de la pyramide de tests. On peut y inclure des tests d’intégration (e2e ou end to end), et du snapshot testing. Les tests unitaires sont les plus petits et les plus simples des tests - Ils vérifient les plus petites unités de travail, isolant ainsi chaque partie d’un même composant.
237240

238-
Snapshot tests save the markup of your Vue component, and compare to the new one generated each time the test runs. If something changes, the developer is notified, and can decide if the change was intentional (the component was updated) or accidental (the component is behaving incorrectly).
241+
Le snapshot testing permet de sauvegarder le rendu HTML d’un composant Vue, et de le comparer au rendu généré chaque fois que les tests passent. Si quelque chose change dans le rendu, le développeur est averti et peut décider si le changement est intentionnel (le composant a été mis à jour) ou involontaire (le composant ne se comporte pas comme prévu).
239242

240-
End to end tests ensure a number of components interact well together. They are more high level. Some examples might be testing if a user can sign up, log in, and update their username. These are slower to run than unit tests or snapshot tests.
243+
Les tests d’intégration testent l’interaction de plusieurs composants. Il s’agit de tests plus haut niveau. Par exemple tester si un utilisateur peut s’enregistrer se logger et changer son `username`. Ils peuvent être plus lent et plus long a exécuter que les tests unitaires ou snapshot.
241244

242-
Unit tests are most useful during development, either to help a developer think about how to design a component, or refactor an existing component, and are often run every time code is changed.
245+
Les tests unitaires sont souvent utilisés lors du développement, soit pour aider le développeur à concevoir l’architecture d’un composant, soit pour l’aider a refactorer un composant existant. Ils sont souvent exécutés après chaque changement du code.
243246

244-
Higher level tests, such as end to end tests, run much slower. These usually run pre-deploy, to ensure each part of the system is working together correctly.
247+
Les test de plus haut niveau comme les tests d’intégration son plus lent a l’exécution. Ces tests sont plutôt lancés avant de déployer une mise à jour en production, pour s’assurer que chaque partie du logiciel fonctionne correctement.
245248

246-
More information about testing Vue components can be found in [Testing Vue.js Applications](https://www.manning.com/books/testing-vuejs-applications) by core team member [Edd Yerburgh](https://eddyerburgh.me/).
249+
Plus d’info sur comment tester des composants VueJs dans le livre de [Edd Yerburgh](https://eddyerburgh.me/) membre de la core team de VueJs : [Testing Vue.js Applications](https://www.manning.com/books/testing-vuejs-applications) (en anglais).
247250

248-
## When To Avoid This Pattern
251+
## Quand éviter ce pattern
249252

250-
Unit testing is an important part of any serious application. At first, when the vision of an application is not clear, unit testing might slow down development, but once a vision is established and real users will be interacting with the application, unit tests (and other types of automated tests) are absolutely essential to ensure the codebase is maintainable and scalable.
253+
Les tests unitaires sont une part importante de toute application sérieuse. Au début, quand l’application commence et que la vision complète n’est pas très claire, les tests unitaires peuvent ralentir un peu le développement, mais une fois l’architecture établie et que des utilisateurs réels utilisent l’application, les tests unitaires (et tous types de tests automatiques) sont essentiel à la stabilité et la scalabilité.

0 commit comments

Comments
 (0)