1.2.1 • Published 2 years ago

@pactflow/pact-cypress-adaptor v1.2.1

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

Pact Cypress Adaptor

Generate pact contracts from cypress test.

Installation

#todo add bash script for 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.

Add more headers to blocklist

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

Ignore cypress auto-generated header blocklist

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')
})

//... cypress test

after(() => {
    cy.usePactWait(['getAllUsers'])
})

cy.setupPactHeaderBlocklist(headers)

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'])
})

//... cypress test

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')
})

//... cypress test

after(() => {
    cy.usePactGet(['getAllUsers'])
})

Example Project

Check out a simple react app example project at /example/todo-example