12  Testes e Boas Práticas

Escrever código que funciona é importante.
Escrever código confiável e fácil de manter é essencial.

12.1 Boas práticas essenciais

  1. Use nomes claros para variáveis e funções.
  2. Crie funções pequenas com uma responsabilidade.
  3. Evite duplicação de código.
  4. Trate erros de forma explícita.
  5. Comente apenas quando necessário.

12.2 Exemplo: função clara e validada

function calcularMedia(notas) {
  if (!Array.isArray(notas) || notas.length === 0) {
    throw new Error("Informe um array de notas");
  }

  const soma = notas.reduce((acc, n) => acc + n, 0);
  return soma / notas.length;
}

12.3 Tratamento de erros

function dividir(a, b) {
  if (b === 0) {
    throw new Error("Divisão por zero não permitida");
  }

  return a / b;
}

try {
  console.log(dividir(10, 0));
} catch (erro) {
  console.error("Erro:", erro.message);
}

12.4 Validações úteis

function criarAluno(nome, idade) {
  if (!nome || typeof nome !== "string") {
    throw new Error("Nome inválido");
  }

  if (typeof idade !== "number" || idade < 0) {
    throw new Error("Idade inválida");
  }

  return { nome, idade };
}

12.5 Introdução a testes unitários com Vitest

sum.js

export function sum(a, b) {
  return a + b;
}

sum.test.js

import { describe, it, expect } from "vitest";
import { sum } from "./sum.js";

describe("sum", () => {
  it("deve somar dois números", () => {
    expect(sum(2, 3)).toBe(5);
  });
});

12.6 Testando casos de erro

dividir.test.js

import { describe, it, expect } from "vitest";
import { dividir } from "./dividir.js";

describe("dividir", () => {
  it("deve lançar erro quando divisor é zero", () => {
    expect(() => dividir(10, 0)).toThrow("Divisão por zero");
  });
});

12.7 Cobertura mínima de testes

Para funções críticas, tente cobrir:

  1. caso comum;
  2. caso de borda;
  3. caso inválido.

12.8 Checklist de revisão antes de entregar

  1. O código está legível?
  2. Há validações mínimas?
  3. Erros são tratados?
  4. Existem testes para as funções principais?
  5. Os nomes estão claros?

12.9 Exercícios

  1. Refatore um código longo em funções menores.
  2. Implemente validações com throw e try/catch.
  3. Escreva 3 testes para funções matemáticas simples.
  4. Escreva teste para um cenário de erro.
  5. Desafio: testar uma função que recebe array e retorna média.