2.5.2 • Published 15 days ago

cypress-hardhat v2.5.2

Weekly downloads
-
License
GPL-3.0-or-later
Repository
github
Last release
15 days ago

cypress-hardhat

npm Tests

A jest environment with hardhat built in.

cypress-hardhat is a hardhat plugin for running a hardhat fork for your tests. Instead of running a separate hardhat node, this environment runs a node and communicates the url and test accounts to cypress - with some test utilities to boot.

Installation

First, install cypress-hardhat and its dependencies (using yarn or npm).

The environment needs ethers, and hardhat installed as well. These are installed as peer dependencies to ensure that you retain control over versioning, so you'll need to install them explicitly:

yarn add -D ethers hardhat
yarn add -D cypress-hardhat

Then, set up your hardhat.config.js file. You'll need to configure mainnet forking to set the initial state of the hardhat network within jest.

NOTE: You should set the accounts field to include as few accounts as possible to reduce startup time for your tests' hardhat network.

cypress-hardhat may be configured to respond to wallet_switchEthereumChain requests to help test EIP-3326 interactions. To configure this behavior, add a forks field to your hardhat.config.js with the chains you are going to switch to:

const forks = {
  [1]: {
    url: `${process.env.JSON_RPC_PROVIDER}`,
    blockNumber: 17023328,
    httpHeaders: {},
  },
  [137]: {
    url: `${process.env.POLYGON_JSON_RPC_PROVIDER}`,
    blockNumber: 43600000,
    httpHeaders: {},
  },
}

module.exports = {
  forks,
  networks: {...},
  ...
}

Finally, install the plugin in your cypress configuration (see the cypress documentation for details):

import { setupHardhatEvents } from 'cypress-hardhat'

export default defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      // Install the plugin here
      setupHardhatEvents(on)
    },
  },
})

In addition, cypress-hardhat includes some utilities for seeding your environment. These should be imported into your browser testing environment, not in your configuration:

import { CurrencyAmount, Ether, Token } from '@uniswap/sdk-core'
import { HardhatUtils, Network } from 'cypress-hardhat/lib/browser'

declare global {
  namespace Cypress {
    interface Chainable<Subject> {
      task(event: 'hardhat'): Chainable<Network>
    }
  }
}

const ETH = Ether.onChain(CHAIN_ID)
const amount = CurrencyAmount.fromRawAmount(ETH, 6000000).multiply(10 ** ETH.decimals)

it('communicates with hardhat', () => {
  cy.task('hardhat').then((network) => {
    const hardhat = new HardhatUtils(network)
    hardhat.fund(hardhat.account, amount)
  })
})

For example, this can be used to inject a mock window.ethereum object that will communicate with hardhat.


Made with 🦄 by Uniswap Labs

2.5.2

15 days ago

2.5.1

2 months ago

2.5.0

10 months ago

2.4.2

11 months ago

2.4.1

11 months ago

2.4.0

12 months ago

2.3.0

1 year ago

2.2.1

1 year ago

2.2.0

1 year ago

2.1.0

1 year ago

2.0.0

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago