Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

WoMakersCode profile imageKamila Santos Oliveira
Kamila Santos Oliveira forWoMakersCode

Posted on

     

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.

TDD

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:

Configuração dos testes

npm install   jest --save-dev
Enter fullscreen modeExit fullscreen mode

será responsável por configurar e executar nossos testes

npm install supertest --save-dev
Enter fullscreen modeExit fullscreen mode

o supertest nos fornece uma melhor abstração e compreensão do resultado e execução dos testes. agora escrevemos os testes.

Crie uma pastatests 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:

//importa os módulos e aqruivos necessáriosconst request = require('supertest');const server = require('../app.js');const sayTDD = require('../helloJest');//o que será executado antes de todos os testesbeforeAll(async () => {   console.log('Iniciando TDD com jest!');});//o que será executado após todos os testesafterAll(() => {   //o server close irá encerrar nossa aplicação, evitando problemas da porta já estar em usoserver.close();console.log('servidor fechado');});describe('inicio dos testes', () => {   //descrição do caso de testes   test('acessa a rota da home e verifica o conteúdo que é exibido ', async () => {      //qual a rota que ele deve acessar e qual requisição deve fazer      const response = await request(server).get('/');      //qual o status esperado       expect(response.status).toEqual(200);      //se todos esses passos passarem, verifica o conteúdo exibido dentro desta rota      expect(response.text).toContain('<h1>Você está na Home!</h1> <p> vamos começar os testes </p>');   });   test('acessa a rota /tdd e então será apresentada a seguinte defiição de tdd:', async () => {      const response = await request(server).get('/TDD');      expect(response.status).toEqual(200);      expect(response.text).toContain('<h4>no tdd primeiro fazemos os testes e depois desenvolvemos o sistema para que ele passe nos testes</h4>');   });   test('acessa a rota /koa e então será apresentada a seguinte definição de Koa.js', async () => {      const response = await request(server).get('/KOA');      expect(response.status).toEqual(200);      expect(response.text).toContain('<h4>O Koa é uma nova estrutura da Web criada pela equipe do Express, que pretende ser uma base menor, mais expressiva e mais robusta para aplicativos da Web e APIs</h4>');   });   //aqui não iremos testar uma rota e sim o retorno de uma função.   test('irá verificar o retorno da função saytdd', () => {      //é esperado que o retorno da função saytdd seja:      expect(sayTDD()).toMatch('TDD é o Desenvolvimento Orientado por Testes');   });
Enter fullscreen modeExit fullscreen mode

Testes modelados, agora vamos instalar as dependências necessárias para iniciarmos nosso desenvolvimento:

dependências da aplicação

npm install koa
Enter fullscreen modeExit fullscreen mode

vai gerenciar a nossa parte de rotas e requisições

npm install nodemon -g
Enter fullscreen modeExit fullscreen mode

quando se sobe a aplicação sem ser nos testes, o nodemon garante que toda alteração salva vai ser atualizada em tempo real na nossa aplicação sem necessitar parar o servidor e subir de novo para ver a alteração

npm install koa-logger
Enter fullscreen modeExit fullscreen mode

nos fornece um status detalhado do que acontece na nossa aplicação, qual a rota acessada, o status obtido, o tempo de resposta e quantos dados foram transmitidos.

 npm install koa-router
Enter fullscreen modeExit fullscreen mode

faz o direcionamento das rotas

Criamos o arquivo app.js que será nosso servidor para que passe nos nossos testes:

//esse arquivo é o nosso servidorconst Koa = require('koa');const Router = require('koa-router');const logger = require('koa-logger');//iniciamos uma nova aplicação Koaconst app = new Koa();//iniciamos as rotasconst router = new Router();//habilitamos o uso do Koa Loggerapp.use(logger());//faz um get na rota home, o ctx é um espécie de método acessor que pega o contexto de uma parte do código e o next informa ao //middleware que após terminar esa operação pode ir para a próxima requisição de forma não bloqueanterouter.get('/', (ctx, next) => {    ctx.body = '<h1>Você está na Home!</h1> <p> vamos começar os testes </p>';});router.get('/TDD', (ctx, next) => {    ctx.body = '<h4>no tdd primeiro fazemos os testes e depois desenvolvemos o sistema para que ele passe nos testes</h4>';   });router.get('/KOA', (ctx, next) => {    ctx.body = '<h4>O Koa é uma nova estrutura da Web criada pela equipe do Express, que pretende ser uma base menor, mais expressiva e mais robusta para aplicativos da Web e APIs</h4>';   });//cria as rotasapp.use(router.routes());//permite todos os tipos de requisição,get,post,put,deleteapp.use(router.allowedMethods());//cria o servidor para rodar na porta 3000const server = app.listen(3000);//exporta o server para que seja possivel acessá-lo em outras partes do programamodule.exports = server;
Enter fullscreen modeExit fullscreen mode

O último caso de testes, era sobre retorno de uma função, vamos criá-la em um arquivo helloJest.js à parte do nosso server

function sayTDD(){    //criamos a função com exatamente o retorno que foi descrito nos testes    return 'TDD é o Desenvolvimento Orientado por Testes'}module.exports = sayTDD;
Enter fullscreen modeExit fullscreen mode

Antes de executarmos os testes, verifique se o seu package.json está semelhante à este:

{  "name": "koatesting",  "version": "1.0.0",  "description": "",  "main": "index.js",  "scripts": {    "test": "jest --watchAll",    "dev": " nodemon app.js "  },  "keywords": [],  "author": "",  "license": "ISC",  "dependencies": {    "koa": "^2.7.0",    "koa-logger": "^3.2.0",    "koa-router": "^7.4.0"  },  "devDependencies": {    "jest": "^24.1.0",    "supertest": "^3.4.2"  }}
Enter fullscreen modeExit fullscreen mode

Algumas observações:

Caso tenha algum erro com porta em uso, execute o seguinte comando no seu prompt como administrador:

taskkill /F /IM node.exe
Enter fullscreen modeExit fullscreen mode

para instalar as dependências

npm install
Enter fullscreen modeExit fullscreen mode

para rodar no modo de desenvolvimento:

npm run dev
Enter fullscreen modeExit fullscreen mode

para executar os testes (jest):

npm run test
Enter fullscreen modeExit fullscreen mode

plugin para o vscode para facilitar a visualização dos resultados do teste, eu indico o plugin Jest Test Explorer

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).

http://blog.sciensa.com/tdd-test-driven-development-guia-rapido/
http://nodebr.com/o-que-e-node-js/
https://koajs.com/#introduction
https://jestjs.io/pt-BR/
http://tdd.caelum.com.br/
https://treinamento.nodebr.org/
https://github.com/koajs/logger
https://github.com/ZijianHe/koa-router
https://github.com/koajs/workshop
https://jestjs.io/
https://github.com/facebook/jest

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

Women + Tech = 🦋

Inscreva-se na comunidade e fique por dentro de nossos eventos, cursos, mentorias e projetos open source.

More fromWoMakersCode

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp