by OpenZeppelin

Assertion library for Ethereum smart contract testing

149 Stars 54 Forks Last release: over 1 year ago (v0.4.0) MIT License 215 Commits 38 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

OpenZeppelin Test Helpers

Docs NPM Package Build Status

Assertion library for Ethereum smart contract testing. Make sure your contracts behave as expected.

Test Helpers integrates seamlessly with OpenZeppelin Test Environment, but it also supports Truffle tests and regular web3 workflows.



npm install --save-dev @openzeppelin/test-helpers



in your test files to access the different assertions and utilities.

Note: The following snippet uses OpenZeppelin Test Environment: a Truffle-based setup would work the same way.

const { accounts, contract } = require('@openzeppelin/test-environment');

const { BN, // Big Number support constants, // Common constants, like the zero address and largest integers expectEvent, // Assertions for emitted events expectRevert, // Assertions for transactions that should fail } = require('@openzeppelin/test-helpers');

const ERC20 = contract.fromArtifacts('ERC20');

describe('ERC20', function () { const [sender, receiver] = accounts;

beforeEach(async function () { // The bundled BN library is the same one web3 uses under the hood this.value = new BN(1);

this.erc20 = await;


it('reverts when transferring tokens to the zero address', async function () { // Conditions that trigger a require statement can be precisely tested await expectRevert( this.erc20.transfer(constants.ZERO_ADDRESS, this.value, { from: sender }), 'ERC20: transfer to the zero address', ); });

it('emits a Transfer event on successful transfers', async function () { const receipt = await this.erc20.transfer( receiver, this.value, { from: sender } );

// Event assertions can verify that the arguments are the expected ones
expectEvent(receipt, 'Transfer', {
  from: sender,
  to: receiver,
  value: this.value,


it('updates balances on successful transfers', async function () { this.erc20.transfer(receiver, this.value, { from: sender });

// BN assertions are automatically available via chai-bn (if using Chai)
expect(await this.erc20.balanceOf(receiver));

}); });

Learn More



We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.