Skills
Meta

Tdd

Test-driven development (red-green-refactor). Invoque quando o dev quer construir feature ou corrigir bug test-first, menciona "red-green-refactor", ou quer testes de integração. Referência agnóstica de stack — importada de mattpocock/skills.

TDD (Test-Driven Development)

Origem: importada de mattpocock/skills (engineering/tdd), adaptada ao vocabulário deste harness.

TDD é o loop red → green. Esta skill é a referência que faz esse loop produzir testes que valem a pena manter: o que é um bom teste, onde os testes ficam, os anti-padrões e as regras do loop. Toda seção se aplica em todo ciclo: consulte antes e durante o loop, não depois.

Ao explorar o código, leia CONTEXT.md (se existir — ver skill domain-modeling) para que nomes de teste e vocabulário de interface batam com a linguagem de domínio do projeto, e respeite os ADRs da área que está tocando.

Para mecânica específica de stack (pytest-django + factory_boy, ou Vitest/Playwright), veja backend/django-drfreference/testing.md e frontend/vitest-testing-library/frontend/playwright-e2e. Esta skill é a disciplina agnóstica de stack por trás desses arquivos.

Quando ler cada arquivo

Tarefa Arquivo
Ver exemplos de teste bom vs. ruim (integration-style, implementation-detail, tautológico) tests.md
Decidir o que mockar e como projetar para mockabilidade mocking.md

O que é um bom teste

Testes verificam comportamento através de interfaces públicas, não detalhes de implementação. O código pode mudar inteiramente; os testes não deveriam. Um bom teste lê como uma especificação: "usuário consegue finalizar compra com carrinho válido" diz exatamente qual capacidade existe, e sobrevive a refatorações porque não se importa com estrutura interna.

Veja tests.md para exemplos e mocking.md para diretrizes de mock.

Seams: onde os testes ficam

Um seam é o limite público onde você testa: a interface onde se observa comportamento sem entrar por dentro. Testes vivem em seams, nunca contra internals.

Teste só em seams pré-acordados. Antes de escrever qualquer teste, escreva os seams sob teste e confirme com o dev. Nenhum teste é escrito num seam não confirmado. Não dá para testar tudo, então acordar os seams de antemão é como o esforço de teste cai nos caminhos críticos e na lógica complexa em vez de em cada edge case.

Pergunte: "Qual é a interface pública, e quais seams devemos testar?"

Quando a forma dessa interface está em questão (quão profundo é o módulo, onde fica o seam, o que a interface deve expor), invoque a skill codebase-design para o vocabulário. Ela é a fonte compartilhada dos termos módulo, interface, profundidade, seam, adapter, leverage e localidade — é referência a consultar, não uma sessão a rodar.

Anti-padrões

  • Acoplado à implementação: mocka colaboradores internos, testa métodos privados, ou verifica por canal lateral (consultar o banco direto em vez de usar a interface). O sinal: o teste quebra quando você refatora mas o comportamento não mudou.
  • Tautológico: a asserção recalcula o valor esperado do mesmo jeito que o código calcula (expect(add(a, b)).toBe(a + b), um snapshot derivado à mão da mesma forma, uma constante comparada a si mesma), então passa por construção e nunca pode discordar do código. Valores esperados precisam vir de uma fonte de verdade independente: um literal conhecido, um exemplo trabalhado, o spec.
  • Fatiamento horizontal: escrever todos os testes primeiro, depois toda a implementação. Testes em lote verificam comportamento imaginado: você testa a forma das coisas em vez do comportamento visível ao usuário, os testes ficam insensíveis a mudanças reais, e você se compromete com a estrutura de teste antes de entender a implementação. Trabalhe em fatias verticais: um teste → uma implementação → repita, cada teste sendo uma tracer bullet que responde ao que o último ciclo ensinou.

Regras do loop

  • Red antes do green. Escreva o teste que falha primeiro, depois só o código suficiente para passá-lo. Não antecipe testes futuros nem adicione features especulativas.
  • Uma fatia por vez. Um seam, um teste, uma implementação mínima por ciclo.
  • Refatoração não faz parte do loop. Ela pertence à etapa de revisão (skill code-review), não ao ciclo de implementação red → green.

Skills relacionadas

  • Vocabulário de design de módulo/interface/seam: codebase-design
  • Vocabulário de domínio e CONTEXT.md: domain-modeling
  • Revisão de código pós-implementação: code-review
  • Mecânica de teste por stack: backend/django-drf, frontend/vitest-testing-library, frontend/playwright-e2e