Pact Cypress Adaptor
Generate pact contracts from cypress test.
Installation
Then, setup your cypress plugin at cypress/plugins/index.js
const pactCypressPlugin = require('package-name')
const fs = require('fs')
module.exports = (on, config) => {
pactCypressPlugin(on, config, fs)
}
Finally, update cypress/support/index.js file to include cypress-pact commands via adding:
import 'package-name'
Configuration
By default, this plugin omits most cypress auto-generated HTTP headers.
To exclude other headers in your pact, add them as a list of strings in cypress.json
under key env.headersBlocklist
. Eg. in your cypress.json
{
...otherCypressConfig,
"env": {
"headersBlocklist": ["ignore-me-globally"]
}
}
Note: Header blocklist can be set up at test level. Check command cy.setupPactHeaderBlocklist
To stop cypress auto-generated HTTP headers being omitted by the plugin, set env.ignoreDefaultBlocklist
in your cypress.json
. Eg. in your cypress.json
{
...otherCypressConfig,
"env": {
"headersBlocklist": ["ignore-me-globally"],
"ignoreDefaultBlocklist": true
}
}
Commands
cy.setupPact(consumerName:string, providerName: string)
Configure your consumer and provider name
Example
before(() => {
cy.setupPact('ui-consumer', 'api-provider')
})
cy.usePactWait([alias] | alias)
Listen to aliased cy.intercept
network call(s), record network request and response to a pact file.
Usage and example about cy.intercept
Example
before(() => {
cy.setupPact('ui-consumer', 'api-provider')
cy.intercept('GET', '/users').as('getAllUsers')
})
after(() => {
cy.usePactWait(['getAllUsers'])
})
Add a list of headers that will be excluded in a pact at test case level
before(() => {
cy.setupPact('ui-consumer', 'api-provider')
cy.intercept('GET', '/users', headers: {'ignore-me': 'ignore me please'}).as('getAllUsers')
cy.setupPactHeaderBlocklist(['ignore-me'])
})
after(() => {
cy.usePactWait(['getAllUsers'])
})
cy.usePactRequest(option, alias) and cy.usePactGet([alias] | alias)
Use cy.usePactRequest
to initiate network calls and use cy.usePactGet
to record network request and response to a pact file.
Example
before(() => {
cy.setupPact('ui-consumer', 'api-provider')
cy.usePactRequest('GET', '/users').as('getAllUsers')
})
after(() => {
cy.usePactGet(['getAllUsers'])
})
Example Project
Check out a simple react app example project at /example/todo-example