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.
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
docker run -p 3000:3000 -v ${PWD}/contracts:/usr/app/src/contracts uldissturms/cdc mock ./contracts/simple
npm i cdc
./node_modules/.bin/cdc mock ./contracts/simple
./node_modules/.bin/cdc verify ./contracts/simple --baseUrl http://localhost:3000
const joi = require('joi')
module.exports = {
name: 'simple request/response schema',
request: {
path: '/api/simple-schema',
method: 'POST',
headers: {
'content-type': 'application/json'
},
body: {
hello: 'world'
},
bodySchema: joi.object().keys({
hello: joi.string()
})
},
response: {
body: {
id: 12345
},
bodySchema: joi.object().keys({
id: joi.number().integer()
})
}
}
curl localhost:3000/api/simple-schema -H 'content-type: application/json' -d '{"hello": "world"}'
{"id": 12345}
request | response | |
---|---|---|
consumer | verify schema | mock |
provider | request | verify schema |
-
mock
- mocks responses for consumer -
verify
- verifies contracts agains provider
- 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)
For more examples take a look at contracts in ./contracts
used for tests.
- Joi (schema valiations)
- Hapi (mock provider server)
- Tape (verify consumer contracts against a provider)
MIT