Pular para o conteúdo
murad.guide

Aplicações Web

Capítulo 18

Testes no backend

2 min de leitura 421 palavras 1 gravura

Neste capítulo você vai escrever um teste automatizado da função de validação. O projeto-fio é o Ateliê Boa Viagem, ateliê digital fictício em Boa Viagem, Recife.

Seu ponto de partida

Use o exemplo 18-testes-backend do pacote anexo e copie inicio/ para uma pasta de prática fora do original. A raiz do exemplo é a referência completa desta etapa.

Use servidor só em 127.0.0.1 quando o README do exemplo pedir HTTP local. Abrir ou testar não publica nada.

Como praticar

Leia → copie ou digite → mude uma coisa → preveja → salve → recarregue → confira. Restaure cada experiência antes da próxima. Faça as atividades antes de abrir as respostas comentadas.

Separar lógica pura

Extraia validarOficina(nome) para um módulo testável sem HTTP.

Faça na sua cópia

Confira o trecho no contexto do exemplo antes de mudar.

function validarOficina(nome) {
  if (!nome || !String(nome).trim()) return { ok: false, erro: 'Nome obrigatório' };
  return { ok: true, nome: String(nome).trim() };
}

Mude uma coisa e preveja

Rejeite nomes com menos de 3 caracteres.

Anote o que espera observar antes de salvar e recarregar.

Recarregue e confira

O teste novo falha até ajustar a função.

Se não acontecer

Rode node —test no exemplo.

Ciclo de teste

Teste primeiro ou logo após

Escreva o caso que descreve o comportamento. Veja falhar. Faça passar. O Node traz um runner estável em versões recentes.

Faça na sua cópia

Confira o trecho no contexto do exemplo antes de mudar.

const test = require('node:test');
const assert = require('node:assert/strict');
test('rejeita vazio', () => {
  assert.equal(validarOficina('').ok, false);
});

Mude uma coisa e preveja

Acrescente teste de nome válido.

Anote o que espera observar antes de salvar e recarregar.

Recarregue e confira

A suíte passa.

Se não acontecer

Exporte a função no módulo.

Teste não substitui conferência manual

Ainda abra o endpoint e a página. Teste automatizado pega regressões na lógica; UI pede olho e teclado.

Faça na sua cópia

Confira o trecho no contexto do exemplo antes de mudar.

unitário + manual local

Mude uma coisa e preveja

Rode a suíte duas vezes seguidas.

Anote o que espera observar antes de salvar e recarregar.

Recarregue e confira

Resultado estável.

Se não acontecer

Evite dependência de relógio ou rede neste volume.

Atividades

Atividade 1

Por que extrair validarOficina?

Atividade 2

Qual o ciclo mínimo de TDD citado?

Atividade 3

Teste unitário elimina teste manual?

Respostas comentadas

Resposta da atividade 1

Testar sem subir servidor HTTP.

Resposta da atividade 2

Falhar → passar → (depois) limpar.

Resposta da atividade 3

Não.

O arquivo completo

Referência do exemplo 18-testes-backend, reproduzida aqui para que você possa conferir sem sair da página.

validar.js

function validarOficina(nome) {
  if (!nome || !String(nome).trim()) return { ok: false, erro: 'Nome obrigatório' };
  const n = String(nome).trim();
  if (n.length < 3) return { ok: false, erro: 'Mínimo 3 caracteres' };
  return { ok: true, nome: n };
}
module.exports = { validarOficina };