"Escreva o teste uma vez e pare de clicar: o primeiro teste automático explicado pra quem nunca escreveu um"
"Uma regra do seu app, as quatro linhas que a provam, como ler o que a IA escreveu sem saber programar, e o comando que roda tudo em segundos."
"Com vibe coding, levei 1 hora codando e 10 horas testando e corrigindo erros."
É um relato do TabNews, e eu já fiz a conta de onde saem essas 10 horas: a maior parte é a mesma conferência refeita à mão. Este post é a outra metade. Como transformar uma conferência num teste automático (um pequeno programa que confere se o seu app faz o que devia, sozinho, em segundos) sem você saber programar.
Se nunca escreveu um, não é porque é coisa de gênio. É porque todo tutorial de teste foi escrito por dev, pra dev, e começa explicando ferramenta em vez de explicar a ideia. A ideia cabe em quatro linhas.
O que é um teste, por dentro
Vou usar a regra de uma marmitaria: "3 marmitas de R$ 20 com cupom de 10% dão R$ 54". O teste dela, do jeito que a IA costuma escrever, é isto:
test('3 marmitas de R$ 20 com cupom de 10% dão R$ 54', () => {
const total = calcularTotal({ quantidade: 3, preco: 20, cupom: 10 })
expect(total).toBe(54)
})
Você não precisa entender cada símbolo. Precisa reconhecer três partes:
- O nome, entre aspas na primeira linha. É a sua regra, em português.
- A ação, no meio. O teste faz o que o cliente faria: monta o pedido.
- A conferência, a linha do
expect, que em inglês quer dizer "espero". Lê assim: "espero que o total seja 54".
Isso é tudo. Um teste é um exemplo com a resposta certa anotada. A diferença pro seu caderno é que ele roda sozinho, quantas vezes você quiser, de graça.
Passo 1: peça o teste do jeito que você consegue conferir
Escolha uma regra com número. Se ainda não sabe qual, o placar de três estados te ajuda a escolher. Aí cole:
Escreva um teste automático para esta regra:
"3 marmitas de R$ 20 com cupom de 10% dão R$ 54."
- O nome do teste tem que ser a regra, em português, igual está aqui.
- O valor esperado tem que estar escrito como número (54),
não calculado pelo próprio código.
- Me diga o nome e a pasta do arquivo do teste.
- Me diga o comando que roda todos os testes.
- Rode e cole a saída inteira.
As duas primeiras linhas são o que deixa você conferir sem ler código. As duas do meio são o que faz o teste ser seu, e não da conversa.
Passo 2: confira o arquivo com três perguntas
Abra o arquivo que ela disse. Não leia tudo. Procure três coisas:
- O nome é a sua regra? Se ela escreveu "should calculate total" ou "testa o cálculo", peça de novo. Nome vago gera teste vago.
- Na linha do
expect, tem o SEU número? Tem que estar escrito54, o número que você calculou de cabeça. Se aparecertoBe(60), ela ajustou o teste ao erro do app. Se aparecer o cálculo repetido no lugar do número, o teste confere o código contra ele mesmo e passa sempre. - Tem um teste pra cada exemplo que você pediu? Pediu dois, tem que ter dois
test(.
Isso leva um minuto e pega os dois defeitos mais comuns de teste escrito por IA. O terceiro, o teste que nunca consegue falhar, se pega quebrando a regra de propósito, e o pedido pra isso está aqui.
Passo 3: rode você mesmo
O teste é um arquivo guardado no projeto. Isso quer dizer que você não depende da conversa pra rodar.
No Lovable: a documentação diz que os testes de tela usam uma ferramenta chamada Vitest, ficam ao lado dos componentes em arquivos que terminam em .test.tsx, e rodam "só quando você pede". Então peça: "rode todos os testes de frontend e cole o resumo".
No Claude Code ou com o projeto na sua máquina: abra o terminal (a janela de texto onde se digita comando) na pasta do projeto e digite:
npm run test
Se ela te deu outro comando no passo 1, use o dela.
Passo 4: leia o resultado
Você só precisa de duas linhas, as do fim. Passou fica assim:
✓ 3 marmitas de R$ 20 com cupom de 10% dão R$ 54
Tests 1 passed (1)
Falhou fica assim:
× 3 marmitas de R$ 20 com cupom de 10% dão R$ 54
AssertionError: expected 60 to be 54
Tests 1 failed (1)
Repara por que o nome em português importava: a falha te diz, na sua língua, qual regra quebrou. E a linha do meio diz o quê: "esperava 54, veio 60". Você não precisa ler o código pra pedir o conserto. Cola essas três linhas pra IA e escreve: "este teste falhou; conserte o app, não o teste".
Quando rodar
Antes e depois de todo pedido à IA, junto do roteiro de cinco cliques. O roteiro confere os caminhos; o teste confere as regras com número. E se você usa um arquivo de instruções pra IA, acrescente lá "antes de dizer que terminou, rode os testes e cole o resumo". O formato desse arquivo está aqui.
Hoje é um teste. A próxima vez que você se pegar conferindo uma conta na mão pela segunda vez, é o segundo.
Era uma parede de várias
Um teste automático prova uma regra. Ele não diz quais regras merecem teste e quais não, não protege o login, e não serve de nada se o código não estiver numa conta sua. Isso tudo tem ordem: primeiro o código e o banco serem seus, depois as regras provadas, depois gente de fora usando. O teste de hoje é o primeiro tijolo da segunda fase, e é seu desde já.
Fontes
- Lovable, "Test and verify your app" (testes de frontend com Vitest, arquivos
.test.tsxao lado dos componentes; "Frontend tests run only when requested"): https://docs.lovable.dev/features/testing - Vitest, "Getting Started" (estrutura
test+expect(...).toBe(...), comandonpm run test, resumo "Tests 1 passed"): https://vitest.dev/guide/