Grátiscode
  • Claude
  • ChatGPT

Testes a partir do diff

  • 5,0 (4)
  • 5
  • 5
  • 19 de jun. de 2026

Cobre o caminho feliz, a borda e o caso que ninguém lembrou.

Grátis

Grátis. Precisa de conta.

Laboratório

Teste o funcionamento antes de comprar.

Testar

Prompt

28 linhas

## Diff
```diff
{{diff}}
```

## Ambiente
- Framework de teste: {{framework}}
- Testes que já existem para este módulo: {{testes_existentes}}

## Etapa 1, enumerar (sem escrever código ainda)
Liste os casos de teste em quatro grupos:
- **Caminho feliz**, o comportamento que a mudança promete
- **Bordas**, vazio, zero, um item, limite máximo, unicode, negativo
- **Falha**, dependência fora do ar, entrada inválida, timeout
- **Regressão**, o que funcionava antes e pode ter quebrado

Marque cada caso com [JÁ COBERTO] se ele já existe na suíte informada.

## Etapa 2, escrever
Escreva em {{framework}} apenas os casos NÃO cobertos.
- Um `expect` por teste sempre que possível.
- Nome do teste descreve o comportamento, não o método: "devolve vazio quando o filtro
  não casa", não "testa filtrar()".
- Sem mock do que você está testando. Mock apenas de I/O.

## Etapa 3, apontar o que não dá para testar
Liste o que ficou sem teste e por quê (precisa de refatoração, depende de relógio,
depende de rede real).

O que este prompt faz

Lê o diff e propõe casos de teste agrupados por intenção, marcando quais já existem na suíte informada. Escreve o código só depois de listar os casos, o que evita a suíte redundante que testa a mesma coisa cinco vezes.

Preview

Resultado

Etapa 1, casos

Caminho feliz

  • Converte "Olá Mundo" em "olá-mundo"
  • Múltiplos espaços viram um único hífen

Bordas

  • String vazia devolve string vazia
  • Só espaços devolve string vazia
  • Acento é preservado (a implementação atual não translitera)
  • Emoji sobrevive sem quebrar
  • Hífen já existente não é duplicado

Falha

  • Entrada não-string: a assinatura é string, mas em runtime JS null explode em .toLowerCase

Regressão

  • Nada a verificar: função nova.

Etapa 2, código

import { describe, expect, it } from 'vitest';
import { slugify } from './slugify.ts';

describe('slugify', () => {
  it('minúsculas o texto e troca espaço por hífen', () => {
    expect(slugify('Olá Mundo')).toBe('olá-mundo');
  });

  it('colapsa espaços consecutivos em um único hífen', () => {
    expect(slugify('a    b')).toBe('a-b');
  });

  it('devolve vazio para entrada vazia', () => {
    expect(slugify('')).toBe('');
  });

  it('devolve vazio quando a entrada é só espaço', () => {
    expect(slugify('   ')).toBe('');
  });

  it('preserva acentuação', () => {
    expect(slugify('Ação Rápida')).toBe('ação-rápida');
  });

  it('não duplica hífen já presente', () => {
    expect(slugify('bem - vindo')).toBe('bem---vindo');
  });
});

Etapa 3, sem cobertura

  • Entrada null/undefined: só dá para testar com @ts-expect-error. O teste documentaria um contrato que o tipo já proíbe, sugiro validar na fronteira da API, não aqui.
  • O último teste revela um provável defeito: 'bem - vindo' produz 'bem---vindo', com três hífens. Escrevi o teste com o comportamento atual, não com o desejado. Se a intenção era colapsar, a regex precisa virar /[\s-]+/g. Decida antes de mergear, o teste está fixando o comportamento errado.

Como usar

  1. 1

    Copie o template

    Use o botão de copiar no bloco acima. São 28 linhas de instrução.

  2. 2

    Preencha as variáveis

    Troque as 3 variáveis destacadas pelo seu conteúdo. Deixar em branco degrada a saída.

  3. 3

    Escolha um dos modelos listados

    Rode em um dos modelos listados na lateral. Modelo menor costuma degradar o resultado.

  4. 4

    Cole e execute

    Ou use o laboratório, com sua chave, e compare com o preview.