Introdução
A família de @testing-library
de pacotes que ajudam-te a testar os
componentes de interface de utilizador de uma maneira centrada no utilizador.
O problema
Tu queres escrever testes sustentáveis que dam-te alta confiança de que os teus componentes estão funcionando para os teus utilizadores. Como parte deste objetivo, queres que os teus testes evitem a inclusão de detalhes de implementação para que assim a refatorações dos teus componentes (que mudam a implementação mas não a funcionalidade) não quebrem os teus testes, não abrandam-te nem a tua equipa.
A solução
A biblioteca principal, DOM Testing Library
, é uma solução leve para
testagem de páginas de web consultando e interagindo com os nós do DOM (seja
simulado com JSDOM
/Jest ou no navegador). Os principais
utilitários que ela fornece envolvem a consultar o DOM por nós de uma maneira
que é parecida com maneira que o utilizador encontra os elementos na página.
Desta maneira, a biblioteca ajuda a garantir que os teus testes a darem-te
confiança de que a tua aplicação funcionará quando um utilizador de verdade
usá-la.
A biblioteca principal tem sido envolvida para fornecer APIs ergonómicas para muitas abstrações, incluindo Angular, React, e Vue. Existe também uma extensão para usar as consultas da Testing Library para testes de Ponta-à-Ponta na Cypress e uma implementação para React Native.
O que esta biblioteca não é
- Um executor de teste ou abstração
- Específica à uma abstração de testagem
A DOM Testing Library
funciona com qualquer ambiente que forneça APIS do DOM,
tal como Jest, Mocha + JSDOM, ou um navegador de verdade.
O que deverias evitar com a Testing Library
A Testing Library encoraja-te a evitar a testagem de detalhes de implementação como o interior de um componente que estás a testar (embora ainda seja possível). Os Princípios Orientador desta biblioteca enfatizam uma concentração nos testes que assemelham-se minuciosamente a como as tuas páginas de web são interagidas pelos utilizadores.
Tu talvez queiras evitar os seguintes detalhes de implementação:
- Estado interno de um componente
- Métodos internos de um componente
- Métodos do ciclo de vida de um componente
- Componentes filhos