Contract testing valida integração entre services. Consumer define expectativa, Provider valida. Detecta breaking changes antes de deploy.
Conceitos Principais
Consumer Contract
Consumer define expectativa: "GET /users retorna array com id, name". Gera contract file.
Provider Verification
Provider valida contract. API real atende expectativa? Falha se quebra contrato.
Contract Broker
Pact Broker armazena contracts. Versiona. Garante compatibilidade antes de deploy.
Consumer-Driven
Consumers definem necessidades. Providers implementam. Previne over-engineering.
Passo a Passo
- Consumer Test: Install @pact-foundation/pact. Define interaction: provider.addInteraction({ state: "users exist", request: { method: "GET", path: "/users" }, response: { status: 200, body: [{id: 1}] } }).
- Generate Contract: Run consumer test. Gera contract JSON em pacts/. Commit no git ou publish para broker.
- Provider Verification: Install @pact-foundation/pact. verifyPacts({ provider: "UserService", pactUrls: ["./pacts/consumer-provider.json"] }).
- Pact Broker: Docker: pactfoundation/pact-broker. Publish contracts. Provider verifica latest. can-i-deploy antes de release.
- CI Integration: Consumer: publish contract. Provider: verify contracts. Block deploy se breaking change.
Boas Praticas
Recomendacoes
• Consumer-driven (não provider-driven)
• Contracts pequenos e focados
• Use Pact Broker em prod
• can-i-deploy antes de release
• Version contracts
Erros Comuns
Evite estes erros
• Contract testing para tudo (use integration quando possível)
• Provider-driven contracts
• Não usar broker (contracts desatualizados)
• Contracts muito genéricos
• Não integrar no CI/CD
Checklist
- Pact instalado
- Consumer contracts criados
- Provider verification funcionando
- Pact Broker configurado
- CI publicando e verificando
- can-i-deploy integrado