TDD em Nodejs : conhecendo o Jest
Neste artigo, irei dar uma introdução ao TDD com os testes feitos em Jest e aplicá-los na fase inicial da construção de uma aplicação com Koa.js.
Primeiramente, o que é TDD?
No TDD, escrevemos os testes e desenvolvemos o código para que ele passe neste teste, ele se divide em três etapas:
Vermelho : o teste vai falhar, porque não temos nenhuma lógica construída só as suítes e casos de teste.
Verde: escreve o código para que passe no teste, baseada na descrição e no resultado esperado em cada um dos testes.
Roxa (refatora): melhore o código que já passou nos testes, eliminando redundâncias e duplas responsabilidades em suas funcionalidades.
Como adotar o TDD em um projeto?
Os testes devem ser feitos de modo unitário, testando cada funcionalidade separadamente, como são executados automaticamente, não precisamos ficar abrindo a aplicação e testar manualmente cada uma dessas funcionalidades.
Em testes manuais, deveríamos subir nossa aplicação e realizar cada caso de teste “na mão” e evidenciar cada resultado, em testes automáticos ele irá subir a aplicação, executar cada testes, exibir o resultado esperado e o que foi obtido SOZINHO.
Vantagens de adotar o TDD?
- Qualidade de código
Se um código não pode ser testado por uma máquina, talvez ele não esteja tão “limpo” e bem estruturado assim.
- Raciocínio
Sabendo exatamente o que esperar de cada parte do seu código, você já desenvolve focado na responsabilidade de cada parte dele e inserindo o resultado que é exatamente esperado.
- Segurança
Em casos emergenciais, é possível em alguns casos recorrer aos testes para ver o que cada funcionalidade faz e executar a manutenção de forma mais rápida, sem ter que analisar o código inteiro.
- Trabalho em equipe
A integração de novos membros na equipe é facilitada pelo uso de testes bem documentados para conhecer o seu sistema.
- Documentação
Fazendo os testes antes do código, sempre que for lançada uma nova funcionalidade, ela já estará documentada antes de ser laçada, pelo método “convencional”, quando se faz a documentação após a conclusão da última versão da sua aplicação, temos o grande risco de esquecer de documentar algo e não terminar esta documentação até o lançamento na nova versão.
O que vamos utilizar neste exemplo?
Node.js
Pode ser descrito como o javascript server-side , trabalha de forma assíncrona, não bloqueante, orientado a eventos (fluxo é controlado por ações/requsições externas) e open-source.
Ideal para aplicações real-time
KOA.js
Desenvolvido pela equipe do Express, é uma versão “menor’ e com mais funcionalidades para aplicativos web e APIs, com suas funções assíncronas, pode eliminar retornos de chamadas e facilitar o tratamento dos erros. Por não usar middlewares em várias partes do código, torna os servidores mais rápidos e com código mais limpo
JEST
Criado pelo facebook, pode ser usado em Node, Javascript puro, React, Angular, Vue e outros frameworks.
É bem completo, rápido e precisa de pouca configuração para usar, quando os testes não passam, fornece um contexto rico do porque falhou.
Dependências a serem utilizadas na escrita dos testes:
Crie uma pasta __tests__ nesta pasta irão nossas suítes de teste que o Jest irá executar, crie um arquivo routes.test.js com o seguinte conteúdo:
Testes modelados, agora vamos instalar as dependências necessárias para iniciarmos nosso desenvolvimento:
Criamos o arquivo app.js que será nosso servidor para que passe nos nossos testes:
O último caso de testes, era sobre retorno de uma função, vamos criá-la em um arquivo helloJest.js à parte do nosso server
Antes de executarmos os testes, verifique se o seu package.json está semelhante à este:
Algumas observações:
Agora é só executar npm run test dentro da pasta da aplicação e ver os testes passando com sucesso, experimente fazer algo errado mo código para ver como é apresentado o erro no teste (com o jest — watchAll, toda alteração salva já é testada automaticamente, não precisa executar este comando a cada alteração).
Segue o repositório no git, as referências e os slides que utilizei nessa talk:
http://blog.sciensa.com/tdd-test-driven-development-guia-rapido/
http://nodebr.com/o-que-e-node-js/
https://koajs.com/#introduction
https://treinamento.nodebr.org/
https://github.com/koajs/logger
https://github.com/ZijianHe/koa-router