/seubarriga

Primary LanguageJavaScript

API REST em Node.js com TDD e JEST

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.


Índice: 📋


  • 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 arquivo knexfile.js as chaves: test.version e prod.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 e prod.connection.port do arquivo knexfile.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, depois exit 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 arquivo index.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.

    • Instalação do Express ⚙️

      • 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.
  • Jest - Para criação de testes de API REST.

    • Instalação do Jest ⚙️

      • 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 chave test para jest.

        "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 chave scripts, adicione a chave "secure-mode": "jest --watchAll --verbose=true". E a partir da pasta raiz do projeto execute o comando npm run secure-mode. Após a execução, serão exibidas várias opções para uma nova execução, para sair digite q.

      • Caso você esteja utilizando o eslint (recomendado), no arquivo .eslintrc.json dentro da chave env 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.

    • Instalação do Supertest ⚙️

    • 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.
  • eslint

    • Instalação eslint ⚙️

      • 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 chave rules a outra chave "no-console": "off", para que o lint não reclame do comando console.log();, pois durante o desenvolvimento ele poderá ser utilizado com frequencia.

      • Por fim, no arquivo package.json, adicione na chave scripts, o novo script: "lint": "eslint test/** src/** --fix". Desta forma, quando for executado na raiz do projeto o comando npm 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.

    • Instalação do Body Parser ⚙️

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

    • Instalação do Consign ⚙️

      • 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.
  • Postgres - Como banco de dados relacional.

    • Instalação do Postgres ⚙️

      • 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.
  • Knex - Para querys SQL no Postgres.

    • Instalação do Knex ⚙️

      • 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.
  • Bcrypt - Para encriptação de senhas.

    • Instalação do Bcrypt ⚙️

      • 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.
  • JWT Simple - Para encode de tokens JWT.

    • Instalação do JWT Simple ⚙️

      • 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.
  • Passport - Como middleware de autenticação.

    • Instalação do Passport ⚙️

      • 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.
  • Passport JWT - Para autenticação com tokens JWT.

    • Instalação do Passport 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.
  • Husky - Para realização de tarefas antes do commit, por exemplo: varredura do lint e execução dos testes.

    • Instalação do Husky ⚙️

    • 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 arquivo package.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