TDD: a lista de testes antes do código
nível 2 · 20 min · lista de testes (TDD)
No TDD, o teste vem antes do código: você escolhe o próximo comportamento, escreve um teste que falha, escreve o mínimo para passar e limpa. O que decide o próximo teste é a lista de testes, o inventário do que o código precisa fazer.
Quem começa a programar pelos dois testes que já estão na tela termina cedo e errado. A lista sai das regras do enunciado: cada regra vira ao menos um caso com entrada e saída esperada, e o que ela tem de mais traiçoeiro (pontas, repetições, vazio) vira o caso seguinte.
Regra prática. Antes de programar, transforme cada regra em um caso de teste com entrada e saída. Depois escolha um por vez: faça passar, e só então vá ao próximo.
Monte a lista de testes
A função slugify(title) transforma o título de um artigo no fim da URL. Estas são as regras do enunciado como lista de testes. Os dois testes visíveis cobrem só as duas primeiras linhas.
| Regra | Entrada | Saída esperada | Testes visíveis |
|---|---|---|---|
| Minúsculas, palavras separadas por hífen | "Hello World" | "hello-world" | cobre |
| Dígitos ficam | "Top 10" | "top-10" | cobre |
| Mais de duas palavras | "Testing in production" | "testing-in-production" | não cobre |
| Espaços repetidos e nas pontas viram um só hífen, sem hífen nas pontas | " many spaces " | "many-spaces" | não cobre |
| Pontuação é descartada | "What's new?" | "whats-new" | não cobre |
| Acentos são removidos | "Café com leite" | "cafe-com-leite" | não cobre |
| Hífen do título é separador, não dobra | "Before - after" | "before-after" | não cobre |
| Título em branco | " " | "" | não cobre |
Exercício: escreva o código
Seu código precisa passar nos testes visíveis e nas checagens ocultas, que cobrem o resto da lista.
Escreva slugify(title), que transforma o título de um artigo na parte final da URL.
Regras: minúsculas; palavras separadas por um único hífen; acentos removidos ("é" vira "e"); tudo que não for letra, dígito ou espaço é descartado; sem hífen no começo nem no fim; título vazio ou em branco devolve "".
Os dois testes visíveis cobrem só a primeira regra. As checagens ocultas cobrem o resto: leia as regras como uma lista de testes e vá por ela.
Testes visíveis
test("junta duas palavras em minúsculas", () => {
expect(slugify("Hello World")).to.equal("hello-world");
});
test("mantém os dígitos", () => {
expect(slugify("Top 10")).to.equal("top-10");
});