You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/tutorial/7-Testes e Storybook/4-Vitest.md
+277Lines changed: 277 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,4 +12,281 @@ Assim como no jest para utilizarmos o Vitest precisamos instalar o VueTestUtils,
12
12
npm i @vue/test-utils
13
13
```
14
14
15
+
> apos a instalação do VueTestUtils, vamos instalar o Vitest
16
+
17
+
```bash
18
+
npm i -D vitest
19
+
```
20
+
15
21
## Oque é o Vitest ?
22
+
23
+
O Vitest é uma ferramenta de testes que utiliza o Vite como base, e por isso é muito mais rápida que o Jest, e também é muito mais simples de configurar.
24
+
25
+
## Configuração do Vitest
26
+
27
+
Para rodar os testes é necessário adicionar o seguinte script no package.json:
28
+
29
+
```json
30
+
{
31
+
"scripts": {
32
+
"test": "vitest",
33
+
"coverage": "vitest run --coverage"
34
+
}
35
+
}
36
+
```
37
+
38
+
## Como utilizar o Vitest ?
39
+
40
+
Para criar um teste com o Vitest, basta criar um arquivo com a extensão .test.ts ou .spec.ts se o seu projeto é vue + typescript dentro da pasta de testes, e dentro do arquivo, basta importar o método test do Vitest e criar um teste.
Assim como no Jest o Vitest também possui o describe e o it, e também o expect, que é o que utilizamos para fazer as asserções.
61
+
62
+
> O describe é utilizado para agrupar os testes, e o it é utilizado para criar um teste, e o expect é utilizado para fazer as asserções.
63
+
64
+
Depois de criar o teste, basta rodar o comando:
65
+
66
+
```bash
67
+
npm run test
68
+
```
69
+
70
+
## Testando componentes
71
+
72
+
Depois de entender o básico do Vitest, vamos criar um teste para um componente, para isso vamos criar um componente chamado Button.vue dentro da pasta components, e vamos criar um teste para ele.
73
+
74
+
Vamos criar um componente chamado Button.vue dentro da pasta components, e vamos criar um teste para ele.
Agora vamos criar um teste para esse componente, para isso vamos criar um arquivo chamado Button.test.ts dentro da pasta tests, e vamos criar um teste para ele.
it("should increment count when button is clicked", async () => {
138
+
const wrapper =shallowMount(Button);
139
+
140
+
awaitwrapper.find("button").trigger("click");
141
+
142
+
expect(wrapper.vm.message).toBe("Count: 1");
143
+
});
144
+
});
145
+
```
146
+
147
+
Que teste grande não é ? Mas vamos entender o que está acontecendo.
148
+
149
+
Primeiro vamos entender o que é o shallowMount, o shallowMount é utilizado para montar o componente, e ele recebe como parâmetro o componente que queremos montar, e também podemos passar o propsData, que é utilizado para passar os props para o componente.
150
+
151
+
Depois de montar o componente, podemos utilizar o find para encontrar um elemento dentro do componente, e também podemos utilizar o trigger para disparar um evento, e também podemos utilizar o vm para acessar os dados do componente.
152
+
153
+
### Vamos entender mais afundo o que está acontecendo no teste
154
+
155
+
> Porque fizemos uma interface para o componente ?
156
+
157
+
Porque o componente não tem tipagem, e para que possamos acessar os dados do componente, precisamos tipar o componente, e para isso criamos uma interface para o componente.
158
+
159
+
```ts
160
+
interfaceIButtonextendsVue {
161
+
message:string;
162
+
increment: () =>void;
163
+
}
164
+
```
165
+
166
+
Estendemos a interface do Vue para que o componente tenha acesso a todos os métodos e propriedades do Vue. E também criamos uma interface para o componente, e dentro dessa interface criamos as **`computeds`** e **`methods`** que existem no nosso componente.
167
+
168
+
> shallowMount é utilizado para montar o componente ?
169
+
170
+
Sim, o shallowMount é utilizado para montar o componente, e ele recebe como parâmetro o componente que queremos montar, e também podemos passar as props, mocks e tudo relacionado ao componente que estamos testando.
171
+
172
+
```ts
173
+
const wrapper =shallowMount(Button, {
174
+
propsData: {
175
+
msg: "new message"
176
+
}
177
+
}) asWrapper<IButton>;
178
+
```
179
+
180
+
Caso seu componente tenha contatos com Vuex ou Vuetify, você pode passar os mocks para o shallowMount, e assim você consegue testar o componente e suas dependências.
Dessa maneira, você consegue testar o componente com as dependências do vuex como chamadas na store, e também consegue testar o componente com o vuetify como os breaking points.
203
+
204
+
> Como acessamos os dados do componente ?
205
+
206
+
Para acessar os dados do componente, podemos utilizar o **`vm`**, e para ter acesso a todas as propriedades do componente, precisamos tipar o componente, e para isso criamos uma interface para o componente.
207
+
208
+
## Dando um passo além
209
+
210
+
### Testando renderização do componente utilizando data-testid
211
+
212
+
Para testar a renderização do componente, podemos utilizar o **`data-testid`**, e para isso precisamos adicionar o **`data-testid`** no elemento que queremos testar.
Depois de adicionar o **`data-testid`** no elemento, podemos utilizar o **`find`** para encontrar o elemento, e também podemos utilizar o **`trigger`** para disparar um evento.
Usando o data-testid, além de facilitar encontrar o elemento que você deseja testar, você também auxilia na criação de testes e2e(Cypress), pois você consegue identificar os elementos que você deseja testar.
0 commit comments