Leodario.com

Leodario.com – Tudo sobre Tecnologia

Aula 73 – API JavaScript, Node.js e Express – Unit Testing APIs – Testando funções isoladas

Imagem destacada da aula de API

Introdução (3 min)

Imagine um carro. Você não o montaria de uma vez só, certo? Primeiro testa cada peça individualmente: motor, freios, transmissão. Testar funções isoladas em APIs é a mesma coisa. É garantir que cada “peça” do seu software funcione perfeitamente antes de integrá-la ao todo.

Este processo, unit testing, é fundamental para APIs modernas, garantindo confiabilidade e facilitando a manutenção. Nesta aula, você aprenderá a construir e executar testes unitários para suas funções em Node.js/Express, seguindo as melhores práticas da indústria.

No contexto Node.js/Express, unit tests validam a lógica de negócio isolada em suas rotas, middlewares e outras funções, tornando seu código mais robusto e menos propenso a erros.

Conceito Fundamental (7 min)

Unit testing é a prática de testar unidades individuais de código, como funções, isoladamente. Isso garante que cada componente funcione conforme o esperado antes de ser integrado a outros. A terminologia essencial inclui test runner (framework que executa os testes – usaremos Jest), assertions (comparações entre o resultado esperado e o obtido) e test suites (grupos de testes relacionados).

Em produção, imagine uma API para processar pagamentos. Testes unitários validariam funções individuais, como cálculo de juros, validação de cartão de crédito e registro da transação, independentemente da integração com gateways de pagamento reais.

Unit tests integram-se com ferramentas de CI/CD, automatizando a execução dos testes a cada alteração no código. A principal vantagem é a detecção precoce de erros, simplificando a correção. A desvantagem pode ser o tempo inicial de desenvolvimento dos testes.

Implementação Prática (10 min)

Vamos criar uma função simples e testá-la com Jest. Instale Jest com: npm install --save-dev jest.

// utils.js
function somar(a, b) {
  // Validação robusta dos parâmetros de entrada
  if (typeof a !== 'number' || typeof b !== 'number') {
    throw new Error('Os parâmetros devem ser números.'); // Error handling
  }
  return a + b;
}

module.exports = { somar };

// utils.test.js const { somar } = require('./utils');

describe('Testes para a função somar', () => { it('Deve somar dois números corretamente', () => { expect(somar(2, 3)).toBe(5); });

it('Deve lançar um erro se os parâmetros não forem números', () => { expect(() => somar('a', 2)).toThrow('Os parâmetros devem ser números.'); });

it('Deve retornar zero se um dos números for zero', () => { expect(somar(0,5)).toBe(5); })

});

Para executar o teste, adicione "test": "jest" no scripts do seu package.json e execute npm test. Observe a saída do Jest com os resultados dos testes. Essa configuração é compatível com HostGator Plano M.

Exercício Hands-On (5 min)

Crie uma função subtrair(a, b) que subtrai b de a. Implemente testes unitários para garantir que ela funcione corretamente com números positivos, negativos e zero. Considere também casos de erro, como parâmetros não numéricos.

Solução:

// utils.js
function subtrair(a, b) {
  if (typeof a !== 'number' || typeof b !== 'number') {
    throw new Error('Os parâmetros devem ser números.');
  }
  return a - b;
}
module.exports = { somar, subtrair };

// utils.test.js (adicione os testes abaixo aos existentes) it('Deve subtrair dois números corretamente', () => { expect(subtrair(5, 2)).toBe(3); });

it('Deve lidar com números negativos', () => { expect(subtrair(-5, 2)).toBe(-7); });

it('Deve retornar zero se os números forem iguais', () => { expect(subtrair(5,5)).toBe(0); });

Execute npm test para validar a solução. Em caso de erros, verifique a sintaxe do seu código e as mensagens de erro do Jest. Como próximo passo, explore outras bibliotecas de asserções como Chai e frameworks de teste como Mocha.

🚀 Pronto para a próxima aula?

Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!

📚 Ver todas as aulas