Na aula anterior, entendemos o que são testes e por que eles importam.

Agora é hora de colocar a mão no código e ver:

como testes unitários funcionam na prática.

🎯 Objetivo da aula

Ao final desta aula, você será capaz de:

  • Identificar código testável
  • Escrever testes unitários simples
  • Entender o padrão AAA (Arrange, Act, Assert)
  • Testar funções puras
  • Interpretar resultados de testes

O que torna um código testável?

Código fácil de testar geralmente é:

  • simples
  • determinístico
  • sem efeitos colaterais

Ou seja:

dada a mesma entrada, sempre retorna a mesma saída.

Exemplo de função testável

 function calcularDesconto(valor, percentual) { return valor - (valor * percentual / 100); }

console.log(calcularDesconto(100, 10)); // Saída será: 90

Essa função é ideal para testes unitários.

O padrão AAA (Arrange, Act, Assert)

Todo teste unitário segue três etapas:

  • Arrange → preparar os dados
  • Act → executar a função
  • Assert → verificar o resultado

Teste manual seguindo o padrão AAA

 function testeCalcularDesconto() { // Arrange const valor = 100; const percentual = 10;

// Act
const resultado = calcularDesconto(valor, percentual);

// Assert
if (resultado === 90) {
console.log("Teste passou ✅");
} else {
console.log("Teste falhou ❌");
}
}

testeCalcularDesconto();
// Saída será: Teste passou ✅

Esse é o conceito básico por trás de qualquer framework de testes.

Usando console.assert

O JavaScript possui uma forma nativa simples de assert:

 console.assert( calcularDesconto(200, 20) === 160, "Desconto de 20% em 200 deveria ser 160" ); 

Se o teste falhar, o console exibirá uma mensagem de erro.

Testando múltiplos cenários

Um bom teste cobre mais de um caso:

 function testeMultiplosCasos() { console.assert(calcularDesconto(100, 0) === 100, "Sem desconto"); console.assert(calcularDesconto(100, 50) === 50, "50% de desconto"); console.assert(calcularDesconto(100, 100) === 0, "100% de desconto"); }

testeMultiplosCasos();
// Nenhuma saída indica que todos os testes passaram

O que NÃO testar em testes unitários

Evite testar:

  • DOM
  • requisições HTTP
  • banco de dados
  • timers reais
Esses cenários pertencem a testes de integração ou E2E.

Exemplo de código difícil de testar

 function atualizarInterface() { document.getElementById("resultado").innerText = "Atualizado"; } 

Esse código depende do DOM — não é ideal para testes unitários.

Refatorando para testar

Separe lógica de efeitos colaterais:

 function gerarMensagem() { return "Atualizado"; }

function atualizarInterface() {
document.getElementById("resultado").innerText = gerarMensagem();
}

Agora gerarMensagem pode ser testada facilmente.

Teste da função refatorada

 console.assert( gerarMensagem() === "Atualizado", "Mensagem deveria ser 'Atualizado'" ); 

E os frameworks de teste?

Frameworks como Jest ou Vitest:

  • automatizam execução
  • organizam testes
  • geram relatórios claros

Mas todos seguem exatamente esses princípios que você acabou de aprender.

Boa prática essencial

Se é difícil de testar, provavelmente precisa ser refatorado.

Testes não são um peso — são um guia para código melhor.

Resumo da aula para nunca mais esquecer

  • Testes unitários verificam funções isoladas
  • O padrão AAA organiza testes
  • Funções puras são ideais para testes
  • Evite DOM e APIs em testes unitários
  • Testar ajuda a escrever código melhor

Na próxima (e última!) aula, vamos fechar o curso com:

Debug profissional no navegador.


HARDWARE

Entendendo o seu computador

O que há dentro do meu computador?

Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

O mouse foi criado em 9 de dezembro de 1968, por um americano chamado Douglas Engelbart, que o batizou de "XY Position Indicator for a Display System". Conheça a história do mouse clicando aqui.


Criar um jogo é muito mais complexo do que parece. São milhares, às vezes, milhões de linhas de código. Isso não é exagero! Apenas o jogo Ultima Online possui 6.006.313 linhas de programação, totalizando 25.103.295 palavras


O ábaco é o dispositivo de cálculo mais antigo construído e conhecido pelo homem. Suas formas mais primitivas datam de 400 a.C. e eles foram encontrados na China e na Babilônia. Para saber mais sobre a história dos computadores, clique aqui.


As primeiras máquinas de fliperama do mundo a utilizarem moedas, chamadas de Galaxy Game, custavam mais de 20 mil dólares para serem produzidas. Saiba mais sobre elas aqui.


A primeira versão do clássico Mega Man, para Nintendo 8 bits, tem seu recorde de pontos estabelecido em 03/11/2006, por David Archey, que cravou 2.396.700 pontos, terminando o jogo.