Este repositório serve como um exemplo para a criação de testes unitários e E2E (End-to-End) utilizando NodeJS Nativo. Este projeto é para fins de estudo e ilustra como testar uma API REST básica de usuários.
Esses dois tipos de teste respondem perguntas diferentes:
- Teste Unitário: "essa função, isolada, faz o que deveria?" — chama o código diretamente (
userService,utils), sem subir servidor e sem rede. É rápido, então você escreve muitos. - Teste E2E: "o sistema inteiro, do jeito que um usuário real usaria (HTTP), funciona?" — faz requisições
fetchcontra o servidor rodando, passando por rotas, regras de negócio e dados. É mais lento, então você escreve poucos, cobrindo os fluxos principais.
flowchart TD
A["Testes E2E<br/>poucos • lentos • alta confiança<br/>testam o sistema por fora, via HTTP"]
B["Testes Unitários<br/>muitos • rápidos • isolados<br/>testam uma função por vez, sem rede"]
A --> B
No código deste repositório, isso se traduz em onde cada teste "entra" na aplicação:
flowchart LR
subgraph App["Aplicação (src/)"]
Routes["index.js<br/>Rotas Express"] --> Service["services/userService.js<br/>Regras de negócio"]
Service --> Utils["utils.js<br/>getNextId"]
Service --> Data[("users<br/>array em memória")]
end
E2E["__test__/e2e<br/>fetch via HTTP"] -->|"requisição HTTP<br/>servidor precisa estar rodando"| Routes
Unit["__test__/unit<br/>chamada direta"] -->|"chama a função,<br/>sem servidor"| Service
Unit -->|"chama a função,<br/>sem servidor"| Utils
- Node.js v24 ou superior (LTS mais recente)
- Navegador com suporte a fetch API para rodar os testes E2E
src/- Código-fonte da aplicaçãoindex.js- Rotas da API REST de usuários (Express)services/userService.js- Regras de negócio de usuários (buscar, criar, atualizar, remover)utils.js- Função para gerar um novo ID para um usuário
__test__/- Testesunit/- Testes unitários (utils.jseservices/userService.js)e2e/- Testes E2E (rotas da API com o servidor em execução)
-
Instale as dependências
npm install
-
Para rodar a aplicação:
npm run start
Para rodar os testes unitários:
npm run test:unitNota: Antes de rodar os testes E2E, certifique-se de que a aplicação está rodando.
Para rodar os testes E2E:
npm run test:e2ePara gerar o relatório de cobertura de testes:
npm run test:coverageAqui estão os scripts que você pode usar:
npm run test- Rodar todos os testesnpm run test:unit- Rodar apenas os testes unitáriosnpm run test:e2e- Rodar apenas os testes E2Enpm run test:coverage- Rodar os testes e gerar relatório de coberturanpm run start- Iniciar a aplicação
- Node.js 24
- Testes nativos do Node.js
- Fetch API para testes E2E
Este repositório possui um workflow do GitHub Actions (.github/workflows/ci.yml) que roda automaticamente em pushes e Pull Requests para a branch main: instala as dependências, executa os testes unitários e, em seguida, sobe a aplicação e executa os testes E2E contra ela.
Este projeto é para fins de estudo, então sinta-se à vontade para clonar, modificar e enviar Pull Requests.