Projeto de uma API REST (seubarriga) desenvolvida utilizando a metdoldologia TDD, utlizando o JEST para realização dos testes a nível de integração.
- Node.js e NPM - Node.js como ambiente de execução para criar e executar aplicações em Javascript. E o NPM para: instalação de pacotes, gerenciamento de versões e dependências.
- Postgres - Como banco de dados.
-
Na pasta raiz do projeto, execute o comando
npm install
, para instalar todas as dependências do projeto. -
Confira a versão do postgres (
psql -V
) instalada na sua máquina (OBS. Neste projeto foi utilizada a versão 10.19), caso sua versão seja diferente altere no arquivoknexfile.js
as chaves:test.version
eprod.version
, para a versão correspondente instalada na sua máquina. -
Execute o comando
sudo lsof -i -P -n | grep postgres
, para saber qual a porta o postgres está utilizando na sua máquina e altere as chaves:test.connection.port
eprod.connection.port
do arquivoknexfile.js
, para a porta listada no terminal. -
Execute o comando
psql -U postgres
, em seguida insira a senha configurada na instalação do postgres, para entrar no console dele. -
Dentro do console do postgres execute o comando
CREATE DATABASE barriga;
para criar o banco do projeto, depoisexit
para sair do console. -
Em seguida, execute o comando abaixo para criar as tabelas configuradas nos arquivos de migração.
node_modules/.bin/knex migrate:latest transfers --env test
-
Por fim, execute o comando abaixo para criar as massas de dados, configuradas nos arquivos seed.
node_modules/.bin/knex seed:run --env test
-
Na pasta raiz do projeto, execute o comando
npm test
, para executar toda a suíte de testes do projeto. -
Dentro do projeto acesse:
coverage > Icov-report
e abra no navegador de sua preferência o arquivoindex.html
para visualizar a cobertura dos testes. -
OBS. Caso as colunas de seu relatório estejam vazias, o problema pode ser resolvido instalando as dependências do Handlers a partir do comando
npm i -S handlebars@4.5.3
.
-
Express - Como servidor para a API.
-
- Execute o comando
npm i -S -E express@4.16.4
para instalar as dependências do Express na versão 4.16.0 sem atualização automática no futuro.
- Execute o comando
-
-
Jest - Para criação de testes de API REST.
-
-
Execute o comando
npm i -D jest@23.6.0 -E
para instalar no ambiente de DEV as dependências do Jest na versão 23.6.0 sem atualização automática no futuro. -
Dentro do arquivo
package.json
altere o valor da chavetest
parajest
."scripts": { "test": "jest", "lint": "eslint test/** src/** --fix" }
-
No Jest é possível habilitar a execução de testes "assistida", trata-se de uma execução dos testes em tempo real a cada vez que o arquivo é salvo após sua alteração, de modo que tenhamos um feedback mais rápido sobre as mudanças de código que estão sendo realizadas, sejam elas da aplicação, ou da própria suíte de testes. Para isso, no arquivo
package.json
dentro da chavescripts
, adicione a chave"secure-mode": "jest --watchAll --verbose=true"
. E a partir da pasta raiz do projeto execute o comandonpm run secure-mode
. Após a execução, serão exibidas várias opções para uma nova execução, para sair digiteq
. -
Caso você esteja utilizando o eslint (recomendado), no arquivo
.eslintrc.json
dentro da chaveenv
adicione a chave"jest": true
, como no exemplo abaixo:"env": { "commonjs": true, "es2021": true, "jest": true, # informa ao lint que estamos utilizando o jest "node": true }
-
Execute o comando
npm test
para verificar a eecução do Jest.
-
-
-
Supertest - Como módulo para realizar requisições HTTP para a API, além de assersações a nível de integração.
- Execute o comando
npm i -D -E supertest@3.3.0
para instalar no ambiente de DEV as dependências do Supertest na versão 3.3.0 sem atualização automática no futuro.
-
-
-
Na pasta raiz do projeto seubarriga, execute o comando abaixo para instalar o eslint como uma dependência de desenvolvimento do projeto.
npm i -D eslint
-
Na pasta raiz do projeto seubarriga, execute o comando
node_modules/.bin/eslint --init
abaixo para configurar o eslint, em seguida responda as seguintes perguntas abaixo, conforme respostas exibidas:PERGUNTA RESPOSTA How would you like to use ESLint? To check syntax, find problems, and enforce code style What type of modules does your project use? CommonJS (require/exports) Which framework does your project use? None of these Does your project use TypeScript? No Where does your code run? Node (press <i>
to invert selection)How would you like to define a style for your project? Use a popular style guide Which style guide do you want to follow? Airbnb: http://github.com/airbnb/javascript What format do you want your config file to be in? JSON Would you like to install them now with npm? Yes -
Abra o arquivo
.eslintrc.json
e adicione dentro da chaverules
a outra chave"no-console": "off"
, para que o lint não reclame do comandoconsole.log();
, pois durante o desenvolvimento ele poderá ser utilizado com frequencia. -
Por fim, no arquivo
package.json
, adicione na chavescripts
, o novo script:"lint": "eslint test/** src/** --fix"
. Desta forma, quando for executado na raiz do projeto o comandonpm run lint
, serão corrigidas as infrações que o eslint considera como autocorrigível de acordo com o guide Airbnb que foi configurado anteriomente.
-
-
-
Eslint plugin - Plugin do eslint para o VSCode.
-
Body Parser - Para analisar o corpo das requisições recebidas pela API e disponibilizá-las através da propriedade
req-body
.-
-
Execute o comando
npm i -S -E body-parser@1.18.3
para instalar as dependências do Body Parser na versão 1.18.3 sem atualização automática no futuro.OBS. Essa dependência está intergrada no Express a partir da versão 4.16.0, ou seja, não precisará ser instalado separadamente.
-
-
-
Consign - Para gerenciamento e carregamento de arquivos na aplicação.
-
- Execute o comando
npm i -S -E consign@0.1.6
para instalar as dependências do Consign na versão 0.1.6 sem atualização automática no futuro.
- Execute o comando
-
-
Postgres - Como banco de dados relacional.
-
- Execute o comando
npm i -S -E pg@8.0.3
para instalar as dependências do Postgres na versão 8.0.3 sem atualização automática no futuro.
- Execute o comando
-
-
Knex - Para querys SQL no Postgres.
-
- Execute o comando
npm i -S -E knex@0.15.2
para instalar as dependências do Knex na versão 0.15.2 sem atualização automática no futuro.
- Execute o comando
-
-
Bcrypt - Para encriptação de senhas.
-
- Execute o comando
npm i -S -E bcrypt-nodejs@0.0.3
para instalar as dependências do Bcrypt no ambiente de desenvolvimento, na versão 0.0.3 sem atualização automática no futuro.
- Execute o comando
-
-
JWT Simple - Para encode de tokens JWT.
-
- Execute o comando
npm i -S -E jwt-simple@0.5.5
para instalar as dependências do JWT Simple no ambiente de desenvolvimento, na versão 0.5.5 sem atualização automática no futuro.
- Execute o comando
-
-
Passport - Como middleware de autenticação.
-
- Execute o comando
npm i -S -E passport@0.4.0
para instalar as dependências do Passport no ambiente de desenvolvimento, na versão 0.4.0 sem atualização automática no futuro.
- Execute o comando
-
-
Passport JWT - Para autenticação com tokens JWT.
-
- Execute o comando
npm i -S -E passport-jwt@4.0.0
para instalar as dependências do Passport JWT no ambiente de desenvolvimento, na versão 4.0.0 sem atualização automática no futuro.
- Execute o comando
-
-
Husky - Para realização de tarefas antes do commit, por exemplo: varredura do lint e execução dos testes.
-
Execute o comando
npm i husky@7.0.4 --save-dev
para instalar as dependências do Husky no ambiente de desenvolvimento, na versão 7.0.4 sem atualização automática no futuro. -
Agora, execute os comandos abaixo os quais irão realizar as seguintes tarefas:
- Criar o script
prepare
no arquivopackage.json
- Exeutar o script
prepare
para ativar o hook no git - Criar o arquivo
pre-commit
, no qual serão gravadas pelo Husky as tarefas a serem realizadas antes do commit.npm pkg set scripts.prepare="husky install" && npm run prepare && npx husky add .husky/pre-commit "npm run lint-check" && git add .husky/pre-commit
- Criar o script