
contract-testing-with-pact
by AmnadTaowsoam
SKILL.md
name: Contract Testing with Pact description: Implementing consumer-driven contract testing for microservices using Pact.
Contract Testing with Pact
Overview
Contract testing validates that service consumers and providers agree on request/response expectations. Pact implements consumer-driven contracts (CDC) with shareable pact files and provider verification.
Table of Contents
- What is Contract Testing
- Consumer-Driven Contracts
- Pact Fundamentals
- Pact vs Integration Testing
- Writing Consumer Tests
- Provider Verification
- Pact Broker
- CI/CD Integration
- Bi-Directional Contracts
- Async Messaging
- GraphQL
- Language Support
- Patterns and Anti-Patterns
- Breaking Change Strategy
- Monitoring Compliance
What is Contract Testing
Contract tests validate API interactions without full end-to-end setups. They prevent breaking changes by verifying expectations explicitly.
Consumer-Driven Contracts
Consumers define expectations; providers must satisfy them:
- Faster feedback for consumers
- Clear API expectations
- Reduced integration surprises
Pact Fundamentals
- Consumer tests: Generate pact files.
- Provider verification: Validate pact files.
- Pact files: JSON contracts.
- Pact Broker: Store and manage contracts.
Pact vs Integration Testing
- Pact: Validates interface compatibility.
- Integration: Validates full system behavior.
Use both for comprehensive coverage.
Writing Consumer Tests
Define interactions with matchers:
- Exact value
- Type-based matcher
- Regex matcher
Example (TypeScript):
await provider.addInteraction({
state: 'user exists',
uponReceiving: 'get user',
withRequest: { method: 'GET', path: '/users/123' },
willRespondWith: {
status: 200,
body: { id: like(123), name: like('Alice') }
}
});
Provider Verification
Provider verifies against published contracts:
- Implement state handlers
- Validate response headers/body/status
- Support pending and WIP pacts for safe changes
Pact Broker
Key features:
- Publish and version contracts
- Webhooks on new contracts
- Can-I-Deploy checks for promotion
- Visibility into compatibility
CI/CD Integration
Recommended flow:
- Consumer tests generate pact
- Publish pact to broker
- Provider verifies in CI
- Use Can-I-Deploy before release
Bi-Directional Contracts
Support for provider-defined expectations plus consumer constraints:
- Useful for GraphQL or schema-first APIs
- Prevents provider drift
Async Messaging
Pact supports message-based contracts:
- Define message payload expectations
- Verify consumer and provider handlers
GraphQL
Contract test schema and query responses:
- Use schema as a contract baseline
- Validate query response shapes
Language Support
SDKs available for:
- JavaScript/TypeScript
- Python
- Java
- Go
Patterns and Anti-Patterns
Good:
- Use flexible matchers
- Keep interactions focused
Avoid:
- Over-specifying exact values
- One contract covering multiple unrelated cases
Breaking Change Strategy
- Use pending pacts for backward-compatible changes.
- Version APIs when breaking changes are required.
- Maintain old contract until consumers migrate.
Monitoring Compliance
Track contract verification in CI and alert on failed verification runs.
Related Skills
16-testing/integration-testing09-microservices/service-design03-backend-api/express-rest
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon