A set of sweet chai matchers, makes your test easy to write and read. Below is the list of available matchers:
Testing equality of big numbers:
Available matchers for BigNumbers are: equal, eq, above, below, least, most.
Testing what events were emitted with what arguments:
await expect(token.transfer(walletTo.address, 7)) .to.emit(token, 'Transfer') .withArgs(wallet.address, walletTo.address, 7);
Testing if transaction was reverted:
await expect(token.transfer(walletTo.address, 1007)).to.be.reverted;
Revert with message¶
Testing if transaction was reverted with certain message:
await expect(token.transfer(walletTo.address, 1007)) .to.be.revertedWith('Insufficient funds');
Testing whether the transaction changes balance of an account
await expect(() => myContract.transferWei(receiverWallet.address, 2)) .to.changeBalance(receiverWallet, 2);
Note: transaction call should be passed to the
expect as a callback (we need to check the balance before the call).
The matcher can accept numbers, strings and BigNumbers as a balance change, while the address should be specified as a wallet.
changeBalance calls should not be chained. If you need to chain it, you probably want to use
Change balance (multiple accounts)¶
Testing whether the transaction changes balance for multiple accounts:
await expect(() => myContract.transferWei(receiverWallet.address, 2)) .to.changeBalances([senderWallet, receiverWallet], [-2, 2]);
Testing if string is a proper address:
Proper private key¶
Testing if string is a proper secret:
- Testing if string is a proper hex value of given length: