9

Pact Contract Testing POC

Proof of Concept for consumer-driven contract testing in a microservices architecture using Pact, Node.js, Express, Jest, and Pact Broker.

Overview

  • Developed a comprehensive POC for consumer-driven contract testing using Pact in a Node.js microservices architecture.
  • Implemented both consumer and provider applications with clear separation of responsibilities.
  • Used Jest for test execution and Express for the provider API.
  • Integrated Pact Broker for contract publishing, sharing, and verification between services.
  • Demonstrated the full contract testing lifecycle: contract generation, provider verification, and real integration testing.
  • Automated contract publishing and verification with npm scripts for both consumer and provider.
  • Provided clear documentation and scripts for setup, running tests, and publishing contracts.

Architecture

┌──────────────┐    Contract    ┌──────────────┐
│  Consumer    │◄──────────────►│  Provider    │
│  (Client)    │                │  (API)       │
└──────────────┘                └──────────────┘
        │                              │
        ▼                              ▼
┌──────────────┐                ┌──────────────┐
│ Pact Tests   │                │ Verification │
│ (Mock Srv)   │                │ Tests        │
└──────────────┘                └──────────────┘

Key Features

  • Consumer-Driven Contracts: The consumer defines the expected API contract, which the provider must satisfy.
  • Automated Testing: Run consumer Pact tests to generate contracts, then verify provider implementation against those contracts.
  • Pact Broker Integration: Publish and manage contracts for team collaboration and CI/CD.
  • REST API Coverage: Example endpoints for /user/:id, /users, and /health with sample responses.
  • Quick Start Documentation: Step-by-step instructions for setup, running tests, and publishing contracts.

Benefits

  • 🚨 Early Detection: Catch integration issues before deployment.
  • 🎯 Confidence: Ensure reliable communication between microservices.
  • 📚 Living Documentation: Contracts serve as always-up-to-date API docs.
  • 🔄 Safe Evolution: Evolve APIs with backward compatibility.
  • Fast Feedback: Immediate feedback on breaking changes.

Next Steps

  • Add authentication and error handling scenarios.
  • Integrate with CI/CD pipelines for automated contract testing.
  • Expand contract testing to additional microservices.

For more details, see the GitHub repository.