diff --git a/README.md b/README.md index 4530995c4..16f45b141 100644 --- a/README.md +++ b/README.md @@ -441,6 +441,7 @@ Learn everything in Pact JS in 60 minutes: https://github.com/DiUS/pact-workshop ## Examples * [Complete Example (Node env)](https://github.com/pact-foundation/pact-js/tree/master/examples/e2e) +* [Pact with AVA (Node env)](https://github.com/pact-foundation/pact-js/tree/master/examples/ava) * [Pact with Jest (Node env)](https://github.com/pact-foundation/pact-js/tree/master/examples/jest) * [Pact with Mocha](https://github.com/pact-foundation/pact-js/tree/master/examples/mocha) * [Pact with Karma + Jasmine](https://github.com/pact-foundation/pact-js/tree/master/karma/jasmine) diff --git a/examples/ava/index.js b/examples/ava/index.js new file mode 100644 index 000000000..f3cd3dda4 --- /dev/null +++ b/examples/ava/index.js @@ -0,0 +1,15 @@ +'use strict' + +const axios = require('axios') + +exports.getMeDogs = (endpoint) => { + const url = endpoint.url + const port = endpoint.port + + return axios.request({ + method: 'GET', + baseURL: `${url}:${port}`, + url: '/dogs', + headers: { 'Accept': 'application/json' } + }) +} diff --git a/examples/ava/package.json b/examples/ava/package.json new file mode 100644 index 000000000..debffcc01 --- /dev/null +++ b/examples/ava/package.json @@ -0,0 +1,14 @@ +{ + "name": "avajs-pact-example", + "version": "1.0.0", + "description": "Ava Pact example", + "main": "index.js", + "scripts": { + "test": "ava" + }, + "license": "MIT", + "devDependencies": { + "ava": "^0.21.0", + "axios": "^0.14.0" + } +} diff --git a/examples/ava/test/index.spec.js b/examples/ava/test/index.spec.js new file mode 100644 index 000000000..313c008de --- /dev/null +++ b/examples/ava/test/index.spec.js @@ -0,0 +1,56 @@ +'use strict' + +const path = require('path') +const test = require('ava') +const Pact = require('../../../src/pact.js') +const getMeDogs = require('../index').getMeDogs + +const url = 'http://localhost' +const port = 8989 + +const provider = Pact({ + port: port, + log: path.resolve(process.cwd(), 'logs', 'mockserver-integration.log'), + dir: path.resolve(process.cwd(), 'pacts'), + spec: 2, + consumer: 'MyConsumer', + provider: 'MyProvider' +}) + +const EXPECTED_BODY = [{dog: 1}] + +test.before('setting up Dog API expectations', async () => { + + await provider.setup() + const interaction = { + state: 'i have a list of projects', + uponReceiving: 'a request for projects', + withRequest: { + method: 'GET', + path: '/dogs', + headers: {'Accept': 'application/json'} + }, + willRespondWith: { + status: 200, + headers: {'Content-Type': 'application/json'}, + body: EXPECTED_BODY + } + } + + await provider.addInteraction(interaction) +}) + +test('Dog API returns correct response', async t => { + t.plan(2) + + const urlAndPort = {url: url, port: port} + const response = await getMeDogs(urlAndPort) + t.deepEqual(response.data, EXPECTED_BODY) + + // verify with Pact, and reset expectations + await t.notThrows(provider.verify()) +}) + +test.always.after('pact.js mock server graceful shutdown', async () => { + await provider.finalize() +})