本文介绍了OpenZeppelin Test Helpers,这是一个用于以太坊智能合约测试的断言库。它提供了诸如检查交易是否因正确的原因而revert、验证事件是否以正确的值发出、跟踪余额变化、处理大数以及模拟时间流逝等功能。文章还提供了安装和使用示例,以及进一步学习的链接。
用于以太坊智能合约测试的断言库。 确保你的合约表现符合预期!
检查 交易因正确的原因而回滚
验证 事件 是否使用正确的值发出
优雅地跟踪 余额变化
处理 非常大的数字
模拟 时间的流逝
npm install --save-dev @openzeppelin/test-helpers
安装 web3
和 hardhat-web3
插件。
npm install --save-dev @nomiclabs/hardhat-web3 web3
请记住按照 安装说明 中的说明将插件包含在你的配置中。
在你的测试文件中导入 @openzeppelin/test-helpers
以访问不同的断言和实用程序。
const {
BN, // Big Number 支持
constants, // 常用常量,如零地址和最大整数
expectEvent, // 用于已发送事件的断言
expectRevert, // 用于应失败的交易的断言
} = require('@openzeppelin/test-helpers');
const ERC20 = artifacts.require('ERC20');
describe('ERC20', function ([sender, receiver]) {
beforeEach(async function () {
// 捆绑的 BN 库与 web3 在底层使用的库相同
this.value = new BN(1);
this.erc20 = await ERC20.new();
});
it('reverts when transferring tokens to the zero address', async function () {
// 可以精确地测试触发 require 语句的条件
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 }
);
// 事件断言可以验证参数是否为预期参数
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 断言通过 chai-bn 自动可用(如果使用 Chai)
expect(await this.erc20.balanceOf(receiver))
.to.be.bignumber.equal(this.value);
});
});
- 原文链接: docs.openzeppelin.com/te...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!