Skip to content
Latchkey

O que é snapshot testing?

Snapshot testing registra uma versão reconhecidamente boa de alguma saída e falha o teste se uma execução futura produzir algo diferente.

Snapshot testing troca asserções escritas à mão por uma baseline automática. A primeira execução captura a saída - um componente renderizado, um objeto serializado, uma resposta de API - em um snapshot armazenado. Execuções posteriores comparam com ela e sinalizam qualquer diferença, para que você perceba mudanças não intencionais sem escrever asserts detalhados.

Como funciona

Na primeira execução, o framework de teste salva a saída em um arquivo de snapshot commitado no repositório. Nas execuções seguintes, ele regenera a saída e a compara com o snapshot salvo. Uma correspondência passa; uma divergência falha e mostra o diff, pedindo que você confirme ou rejeite a mudança.

Onde se destaca

  • Capturar mudanças não intencionais em componentes de UI renderizados.
  • Travar grandes estruturas serializadas de forma barata.
  • Reduzir código repetitivo em testes com muita saída.
  • Revelar desvios acidentais de formatação ou de estrutura.

Onde dá errado

Snapshots podem se tornar um problema quando são grandes, opacos ou atualizados de forma reflexa. Um desenvolvedor que executa "atualizar todos os snapshots" sem ler o diff transforma uma rede de segurança em uma mera formalidade. Mantenha os snapshots pequenos e revise cada mudança neles como se fosse código de verdade.

Um exemplo rápido

Um teste de snapshot de componente renderiza o componente e o compara com a baseline armazenada, falhando se a marcação mudar.

A component snapshot test
test("renders button", () => {
  const tree = render(<Button label="Save" />);
  expect(tree).toMatchSnapshot();
});

Snapshot testing no CI

No CI, os snapshots são somente leitura: o pipeline deve falhar em uma divergência em vez de reescrever silenciosamente a baseline. A maioria dos frameworks suporta uma flag ci que bloqueia gravações de snapshot. Rodar esses testes em runners rápidos mantém a comparação barata mesmo para grandes conjuntos de snapshots.

Principais conclusões

  • Snapshot testing compara a nova saída com uma baseline armazenada.
  • É ótimo para capturar mudanças não intencionais de UI e de estrutura.
  • No CI, os snapshots devem ser somente leitura e as atualizações revisadas com cuidado.

Guias relacionados