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 título Tetris detém o recorde de jogo mais adaptado de todos os tempos. No total foram mais de 60 plataformas diferentes que receberam alguma versão do quebra-cabeças criado por Alexey Pajitnov. Conheça mais sobre este incrível jogo clicando aqui.


O ENIAC, primeiro computador valvulado do mundo, possuía 17.000 válvulas, 500.000 pontos de solda, 30 toneladas de peso e ocupava uma área de 180 metros quadrados. Clique aqui e conheça mais sobre a história dos computadores.


A partida mais longa do clássico Space Invaders durou incríveis 38 horas e 32 minutos e esta façanha foi conseguida por um jogador de apenas 12 anos! O jogo, claro, podia ser pausado para alimentação e descanso, mas ainda assim o recorde, estabelecido no dia 02/09/1980, ainda não foi quebrado. Saiba mais.


O famoso título Final Fantasy, da Square Enix, tem este nome exatamente porque se tratava da última esperança da empresa, que estava à beira da falência quando o lançou. Clique aqui e conheça detalhes dessa história.


A empresa Take-Two pagou à Infogrames mais de 22 milhões de dólares pelos direitos de Civilization, em novembro de 1994. Ainda sobre este título, Sid Meier, um dos seus fundadores, é o profissional da área dos games mais premiado em todo o mundo.