Pular para o conteúdo
Test Automation Lab
  • Aprender
  • Praticar
  • Referência
  • Qualidade
Menu
  • Aprender
  • Praticar
  • Referência
  • Qualidade
PT
  • Português
  • English
Tema

Test Automation Lab

GitHub© 2026 LCDS IT

Playground de testes de contrato

Um contrato é a expectativa do consumidor sobre a resposta do provedor. Quando o provedor se desvia (um campo some, um tipo muda, uma chave é renomeada), o consumidor quebra. O teste de contrato dirigido pelo consumidor pega isso antes de ir ao ar.

Percorra cada divergência abaixo: compare o que o consumidor espera com o que o provedor envia, depois alinhe o provedor e veja a contagem de mudanças que quebram cair a zero. Nem toda mudança quebra: veja como campos aditivos e novos valores de enum são tratados. Há mais padrões nas receitas.

✗ Contrato quebrado: restam 4 mudanças que quebram
  • quebra

    Falta um campo obrigatório

    user.email

    O consumidor precisa de "email" para enviar notificações, mas o provedor parou de incluí-lo. Campos obrigatórios que somem quebram todo consumidor que os lê.

    O consumidor espera

    email: string (required)

    O provedor envia

    { "id": 1, "name": "Ada" }

    Alinhado

    { "id": 1, "name": "Ada", "email": "ada@example.com" }
  • quebra

    O tipo de um campo mudou

    user.id

    O consumidor lê "id" como número. O provedor agora o devolve como texto, e a aritmética e a igualdade estrita quebram em silêncio.

    O consumidor espera

    id: number (required)

    O provedor envia

    { "id": "1" }

    Alinhado

    { "id": 1 }
  • quebra

    Um campo foi renomeado

    user.fullName

    O provedor renomeou "fullName" para "name". O consumidor continua lendo "fullName" e agora recebe undefined: renomear é remover e acrescentar.

    O consumidor espera

    fullName: string (required)

    O provedor envia

    { "name": "Ada Lovelace" }

    Alinhado

    { "fullName": "Ada Lovelace" }
  • quebra

    Um campo que não aceita nulo passou a ser nulo

    user.createdAt

    O consumidor espera que "createdAt" seja sempre um texto de data e chama .slice() nele. O provedor agora envia null, e isso lança erro em execução.

    O consumidor espera

    createdAt: string (required, non-null)

    O provedor envia

    { "createdAt": null }

    Alinhado

    { "createdAt": "2026-06-25T10:00:00Z" }
  • aviso

    Apareceu um valor novo no enum

    user.status

    O consumidor só trata "active" | "suspended". O provedor acrescentou "archived". Consumidores tolerantes se viram, mas um switch estrito deixaria passar: trate o caso padrão.

    O consumidor espera

    status: 'active' | 'suspended'

    O provedor envia

    { "status": "archived" }

    Alinhado

    // O consumidor acrescenta um ramo padrão ou combina estender o enum
  • seguro

    O provedor acrescentou um campo extra

    user.lastLogin

    O provedor acrescentou "lastLogin", que o consumidor não lê. Mudanças aditivas são retrocompatíveis: não pedem ação, só reconhecimento.

    O consumidor espera

    (não faz parte do contrato)

    O provedor envia

    { "lastLogin": "2026-06-24T22:00:00Z" }

    Alinhado

    // Seguro: o consumidor ignora campos desconhecidos