hardhat测试合约、编写测试脚本

hardhat项目环境安装:hardhat项目环境安装-CSDN博客

hardhat编写合约、编译合约:hardhat编写合约、编译合约-CSDN博客

hardhat部署合约:hardhat部署合约-CSDN博客

一、在上面的基础上,测试合约、编写测试脚本

1、对于我们的第一个测试,我们需要部署合约,在before钩子中,用脚本获取三个测试账户(owner, addr1, addr2),然后通过ethers.getContractFactory获取合约工厂并部署了Token合约。

2、需要写两个测试用例:

        测试用例1(代币分配): 测试合约是否将所有的代币初始分配给了合约部署者(owner)。通过比较totalSupplyowner的余额来验证这一点,预期两者相等。接着尝试从addr1账户向owner账户转账60个代币,预期这次操作应该失败,并且因为addr1余额不足而触发"revert",错误信息为"Not enough tokens",以此来验证合约能够正确地阻止超额转账。

        测试用例2(代币转账):模拟从owner账户向addr1账户转账50个代币的操作,并验证addr1的余额确实增加了50。

这个两个测试脚本确保了Token合约能够正确地初始化代币总供应量,并且能够处理代币的转账操作,包括成功转账和因余额不足而失败的转账情况

3、在test目录下创建一个Token.js的文件,内容如下:

const { expect } = require("chai");
const { ethers } = require("hardhat");

describe("Token", function () {
    let Token;
    let token;
    let owner;
    let addr1;
    let addr2;

    before(async function () {
        // Deploy a new contract before each test

        [owner, addr1, addr2] = await ethers.getSigners(); // Get default accounts
        Token = await ethers.getContractFactory("Token");
        token = await Token.deploy();
        console.log("Token address:", token.target);
    });

    it("Should assign the total supply of tokens to the owner", async function () {
        const ownerBalance = await token.balanceOf(owner.address);
        expect(await token.totalSupply()).to.equal(ownerBalance);

    });


    it("Should transfer tokens between accounts", async function () {
        // Transfer 50 tokens from owner to addr1
        await token.transfer(addr1.address, 50);
        const addr1Balance = await token.balanceOf(addr1.address);
        expect(addr1Balance).to.equal(50);

        // Attempt an invalid transfer
        await expect(token.connect(addr1).transfer(owner.address, 60)).to.be.revertedWith("Not enough tokens");
    });
});

4、在终端中输入以下命令:

npx hardhat test

若运行指定文件可以使用以下命令:

npx mocha test/Token.js

5、在终端中显示以下信息,则测试合约成功:

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值