- Confiança ao refatorar
- Confiança ao incluir novas funcionalidades
- Confiança ao atualizar dependências
- Facilita a compreensão da implementação
- Funciona como documentação
- Tudo o que fizer sentido testar!
- Devo deixar um comentário? Escreva um teste no lugar!
Os tipos mais comuns de testes
- Unit Tests
- Integration Tests
- End to End (E2E) Tests
-
Jest
- É um test runner
- Localiza os arquivos e executa os testes
- Permite fazer mock e observar métodos em bibliotecas
- Permite fazer assertions, tais como expect().toBe()
-
Cypress
- É um framework de testes End to End
- Executa a aplicação no browser, como se fosse o usuário
- Permite executar no Chrome, Firefox, Edge e Electron
- Uma ferramenta completa, não precisa ser usada com Jest
-
Testing Library
- É uma biblioteca
- Provê utilitários para montar componentes (React, Vue, Svelte...)
- Oferece ferramentas de interagir com componentes como se fosse o usuário
- Trabalha em conjunto com o Jest
- Faz o mesmo papel do Enzyme e Vue-test-utils
- Pode ser usada para substituí-las
-
Enzyme
- É uma biblioteca
- Provê utilitários para montar componentes React
- Oferece ferramentas de interagir com componentes como se fosse o usuário
- Permite manejar state e testar detalhes de implementação
- Trabalha em conjunto com o Jest
- Faz o mesmo papel da Testing Library
- Pode ser usada para substituí-las
-
Vue Test Utils
- É uma biblioteca
- Provê utilitários para montar componentes Vue.js
- Oferece ferramentas de interagir com componentes como se fosse o usuário
- Permite manejar state e testar detalhes de implementação
- Trabalha em conjunto com o Jest
- Faz o mesmo papel da Testing Library
- Pode ser usada para substituí-las
O papel dos testes no deploy moderno Os testes são integrados ao processo de Continuous Integration / Continuous Delivery e são fundamentais para que estes existam.
- Github Actions
- CircleCI
Vantagens
- Melhora a implementação
- Facilita implementação mais simples
- Facilita a escrita dos testes
- Detalhes de implementação frescos na mente
- Menor tempo dedicado a bug fixing
Desafios
- Curva de aprendizado
- Maior tempo de desenvolvimento
- Difícil de vender ao time de produto