Consumer Driven Contracts (CDC)
CDC provides a way to define mock provider for consumer and verify contracts against provider. It is written in JavaScript, however can be run in any setup using docker.
Getting started
Using docker-compose
version: '2'services: api: build: context: . depends_on: - dependency command: npm start dependency: image: uldissturms/cdc volumes: - ./contracts/dependency:/usr/app/src/contracts command: mock ports: - "3000:3000"
Where ./contracts/dependency contains index.js that describes contract.
./contracts
└── dependency
└── index.js
Using docker
docker run -p 3000:3000 -v ${PWD}/contracts:/usr/app/src/contracts uldissturms/cdc mock ./contracts/simple
Using npm
npm i cdc./node_modules/.bin/cdc mock ./contracts/simple./node_modules/.bin/cdc verify ./contracts/simple --baseUrl http://localhost:3000
Contracts
Simple contract with schema validation
const joi = moduleexports = name: 'simple request/response schema' request: path: '/api/simple-schema' method: 'POST' headers: 'content-type': 'application/json' body: hello: 'world' bodySchema: joiobject response: body: id: 12345 bodySchema: joiobject
Response
curl localhost:3000/api/simple-schema -H 'content-type: application/json' -d '{"hello": "world"}'
Usage
request | response | |
---|---|---|
consumer | verify schema | mock |
provider | request | verify schema |
mock
- mocks responses for consumerverify
- verifies contracts agains provider
Options
- mock
- --port, -p - port for running mock server, defaults to 3000 (optional)
- --no-cors, -C - disable CORS support (optional)
- --watch, -w - to watch current directory for contract changes (optional)
- --tls, -t - enable TLS with a self signed certificate ( setting
NODE_TLS_REJECT_UNAUTHORIZED=0
when consuming from node might be required )
- verify
- --baseUrl, -b - base url to run verifications against (required)
Examples
For more examples take a look at contracts in ./contracts
used for tests.
Libraries used
- Joi (schema valiations)
- Hapi (mock provider server)
- Tape (verify consumer contracts against a provider)
Influences
Further reading
Licence
MIT