Socket
Socket
Sign inDemoInstall

@nomicfoundation/hardhat-chai-matchers

Package Overview
Dependencies
298
Maintainers
4
Versions
21
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @nomicfoundation/hardhat-chai-matchers

Hardhat utils for testing


Version published
Weekly downloads
68K
increased by1.39%
Maintainers
4
Created
Weekly downloads
 

Readme

Source

npm

Hardhat Chai Matchers

This plugin adds Ethereum-specific capabilities to the Chai assertion library, making your smart contract tests easy to write and read.

Check its documentation to learn more.

Installation

We recommend using npm 7 or later. If you do that, then you just need to install the plugin itself:

npm install --save-dev @nomicfoundation/hardhat-chai-matchers

If you are using an older version of npm, you'll also need to install all the packages used by the plugin.

npm install --save-dev @nomicfoundation/hardhat-chai-matchers chai@4 @nomicfoundation/hardhat-ethers ethers

That's also the case if you are using yarn:

yarn add --dev @nomicfoundation/hardhat-chai-matchers chai@4 @nomicfoundation/hardhat-ethers ethers

Usage

After installing it, add the plugin to your Hardhat config:

require("@nomicfoundation/hardhat-chai-matchers");

Then you'll be able to use the matchers in your tests:

expect(await token.totalSupply()).to.equal(1_000_000);

await expect(token.transfer(token, 1000)).to.be.revertedWith(
  "Cannot transfer to the contract itself"
);

await expect(token.transfer(recipient, 1000))
  .to.emit(token, "Transfer")
  .withArgs(owner, recipient, 1000);

Known issues

Chaining Async Matchers

Currently, the following matchers do not support chaining:

  • reverted
  • revertedWith
  • revertedWithCustomError
  • revertedWithoutReason
  • revertedWithPanic
  • changeEtherBalance
  • changeEtherBalances
  • changeTokenBalance
  • changeTokenBalances
  • emit (with the only exception of chaining multiple emit matchers)

Which means you can't do:

await expect(contract.f(...))
  .to.changeEtherBalance(...)
  .and.to.changeTokenBalance(...)

To work around this limitation, write separate assertions for each matcher:

const tx = contract.f(...);
await expect(tx).to.changeEtherBalance(...)
await expect(tx).to.changeTokenBalance(...)

If you are interested in seeing an implementation of chaining for async matchers, please visit the GitHub issue #4235 and leave an upvote or comment.

Keywords

FAQs

Last updated on 15 Feb 2024

Did you know?

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc