npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@pactflow/pact-cypress-adapter

v2.0.0

Published

A cypress adapter for pact

Readme

Pact Cypress Adapter

test npm version

Generate Pact contracts from your existing Cypress tests.

Accelerate your entry into contract testing with the Cypress development experience you know and love. — With Pact Cypress Adapter you can get the extra layer of testing safety, easily using existing mocks you’ve created with Cypress.

Read our blog post to find out more, otherwise dive-right in.

Requirements

  • Cypress 12.17.4 or later. Earlier versions bundle support files with webpack 4, which cannot parse this package.
  • A maintained Node.js release, currently 22 or later.

Installation

Use your favourite Node package manager:

npm i -D @pactflow/pact-cypress-adapter
yarn add -D @pactflow/pact-cypress-adapter
pnpm add -D @pactflow/pact-cypress-adapter

Setup

Configure the Pact plugin in your cypress.config.{js,ts} file using the setupNodeEvents function:

const { defineConfig } = require('cypress')

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      const pactCypressPlugin = require('@pactflow/pact-cypress-adapter/dist/plugin')
      const fs = require('fs')
      pactCypressPlugin(on, config, fs)
      return config
    }
  }
})

Then, update your cypress/support/e2e.js file to include the Pact Cypress commands:

import '@pactflow/pact-cypress-adapter'

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 your cypress.config.{js,ts} file under the expose.headersBlocklist key:

const { defineConfig } = require('cypress')

module.exports = defineConfig({
  expose: {
    headersBlocklist: ['ignore-me-globally']
  },
  e2e: {
    setupNodeEvents(on, config) {
      // ... plugin setup
    }
  }
})

Note: Header blocklist can also be set up at test level. See cy.setupPactHeaderBlocklist

Ignore cypress auto-generated header blocklist

To stop Cypress auto-generated HTTP headers from being omitted by the plugin, set expose.ignoreDefaultBlocklist to true:

const { defineConfig } = require('cypress')

module.exports = defineConfig({
  expose: {
    headersBlocklist: ['ignore-me-globally'],
    ignoreDefaultBlocklist: true
  },
  e2e: {
    setupNodeEvents(on, config) {
      // ... plugin setup
    }
  }
})

If you're using Cypress 15.9.x or earlier, you can use the env configuration instead of expose:

const { defineConfig } = require('cypress')

module.exports = defineConfig({
  env: {
    headersBlocklist: ['ignore-me-globally'],
    ignoreDefaultBlocklist: true
  },
  e2e: {
    setupNodeEvents(on, config) {
      // ... plugin setup
    }
  }
})

Migration Note: Cypress 15.10.0 deprecated Cypress.env(), and Cypress 16 removed it. Use the expose configuration above on Cypress 15.10.0 and later. The adapter reads expose first and falls back to env.

Commands

cy.setupPact

Configure your consumer and provider name

before(() => {
  cy.setupPact('ui-consumer', 'api-provider')
})

cy.usePactWait

Listen to aliased cy.intercept network call(s), record network request and response to a pact file. Usage and example about cy.intercept

before(() => {
  cy.setupPact('ui-consumer', 'api-provider')
  cy.intercept('GET', '/users').as('getAllUsers')
})

//... cypress test

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

cy.setupPactHeaderBlocklist

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 and cy.usePactGet

Use cy.usePactRequest to initiate network calls and use cy.usePactGet to record network request and response to a pact file.

Convenience wrapper for cy.request(options).as(alias)

Example

before(() => {
  cy.setupPact('ui-consumer', 'api-provider')
  cy.usePactRequest(
    {
      method: 'GET',
      url: '/users'
    },
    'getAllUsers'
  )
})

//... cypress test

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

Example Project

Check out a comprehensive React app example demonstrating Pact Cypress Adapter at example/todo-example/.

The example showcases:

  • Modern Cypress configuration using cypress.config.js
  • Two testing patterns: cy.intercept() for mocked responses and cy.usePactRequest() for real API calls
  • Custom commands to reduce boilerplate
  • Best practices for test isolation and contract testing