Socket
Socket
Sign inDemoInstall

cypress-hardhat

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cypress-hardhat

A cypress plugin for testing against hardhat


Version published
Weekly downloads
4.7K
increased by71.66%
Maintainers
1
Weekly downloads
 
Created
Source

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

FAQs

Package last updated on 11 Jul 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc