TDD em TypeScript: escreva código sem medo e sem culpa

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Chega de adivinhar: por que TDD não é masoquismo, mas um superpoder

\n\n

Imagine: você escreve código. Tudo funciona. Você está satisfeito. Um mês depois, você volta ao projeto, faz uma pequena alteração — e tudo quebra. Familiar? Agora imagine que você tem uma rede de segurança que captura cada erro em um segundo. Isso é o TDD em TypeScript — desenvolvimento orientado a testes.

\n\n

Muitos desenvolvedores acham que TDD é para perfeccionistas ou para projetos da NASA. Spoiler: não é. Test Driven Development é uma ferramenta que economiza horas de depuração, melhora a qualidade do código e torna a refatoração segura. Neste artigo, vamos explorar o TDD TypeScript com exemplos reais, sem rodeios ou abstrações.

\n\n

Se você programa em TypeScript e quer parar de ter medo das suas próprias alterações — continue lendo. Vai ser interessante.

\n\n

O que é TDD (e por que não é sobre "escrever testes")

\n\n

TDD (Test-Driven Development) é uma metodologia onde os testes são escritos antes do código. Parece loucura? Só à primeira vista. O ciclo TDD consiste em três etapas:

\n\n
    \n
  1. Vermelho (Red) — escreva um teste que certamente falhará, porque o código ainda não existe.
  2. \n
  3. Verde (Green) — escreva o código mínimo para que o teste passe.
  4. \n
  5. Refatoração (Refactor) — melhore o código sem alterar seu comportamento.
  6. \n
\n\n

E assim — em ciclo. Cada nova funcionalidade começa com um teste. Isso disciplina, força você a pensar no design da API antecipadamente e dá a confiança de que tudo funciona como um relógio.

\n\n

A propósito, testes unitários TypeScript não são apenas "verificação de funções". São documentação, especificação e seguro em um só pacote.

\n\n

Ferramentas para TDD em TypeScript: o que instalar

\n\n

Para testes TypeScript, precisaremos de:

\n\n
    \n
  • Jest — o framework de testes mais popular. Funciona nativamente com TypeScript.
  • \n
  • ts-jest — predefinição para Jest entender TypeScript sem configuração adicional.
  • \n
  • @types/jest — tipos para autocompletar na IDE.
  • \n
\n\n

Instalação em um comando:

\n\n
npm install --save-dev jest ts-jest @types/jest typescript
\n\n

Adicione no package.json o script para executar os testes:

\n\n
"scripts": {\n  "test": "jest",\n  "test:watch": "jest --watch"\n}
\n\n

Agora está tudo pronto para o desenvolvimento orientado a testes TypeScript.

\n\n

Escrevendo o primeiro teste com TDD: do vermelho ao verde

\n\n

Vamos supor que precisamos escrever uma função que verifica se uma string é um palíndromo. Pela clássica abordagem TDD — começamos com o teste.

\n\n

Passo 1. Vermelho (Red)

\n\n

Crie o arquivo isPalindrome.test.ts:

\n\n
import { isPalindrome } from './isPalindrome';\n\ndescribe('isPalindrome', () => {\n  it('deve retornar true para a string "racecar"', () => {\n    expect(isPalindrome('racecar')).toBe(true);\n  });\n\n  it('deve retornar false para a string "hello"', () => {\n    expect(isPalindrome('hello')).toBe(false);\n  });\n});
\n\n

Execute o teste:

\n\n
npm test
\n\n

Vemos o erro: Cannot find module './isPalindrome'. Ótimo, a fase vermelha foi concluída. Agora precisamos escrever o código para que o teste passe.

\n\n

Passo 2. Verde (Green)

\n\n

Crie isPalindrome.ts com a implementação mínima:

\n\n
export function isPalindrome(str: string): boolean {\n  return str === str.split('').reverse().join('');\n}
\n\n

Execute os testes novamente — verde! Ambos os testes passam. Mas ainda não é tudo.

\n\n

Passo 3. Refatoração (Refactor)

\n\n

Nossa função funciona, mas há um detalhe: ela não lida com strings que contêm espaços e letras maiúsculas/minúsculas. Vamos adicionar um novo teste:

\n\n
it('deve ignorar maiúsculas/minúsculas e espaços',                

Blogs

Book Recommendations