pragma solidity ^0.6.0;import"@openzeppelin/contracts/token/ERC20/ERC20.sol";// Example class - a mock class using delivering from ERC20
contract BasicToken is ERC20{constructor(uint256 initialBalance)ERC20("Basic","BSC")public{_mint(msg.sender, initialBalance);}}
import{expect, use}from'chai';import{Contract}from'ethers';import{deployContract, MockProvider, solidity}from'ethereum-waffle';import BasicToken from'../build/BasicToken.json';use(solidity);describe('BasicToken',()=>{const[wallet, walletTo]=newMockProvider().getWallets();let token: Contract;beforeEach(async()=>{
token =awaitdeployContract(wallet, BasicToken,[1000]);});it('Assigns initial balance',async()=>{expect(await token.balanceOf(wallet.address)).to.equal(1000);});it('Transfer adds amount to destination account',async()=>{await token.transfer(walletTo.address,7);expect(await token.balanceOf(walletTo.address)).to.equal(7);});it('Transfer emits event',async()=>{awaitexpect(token.transfer(walletTo.address,7)).to.emit(token,'Transfer').withArgs(wallet.address, walletTo.address,7);});it('Can not transfer above the amount',async()=>{awaitexpect(token.transfer(walletTo.address,1007)).to.be.reverted;});it('Can not transfer from empty account',async()=>{const tokenFromOtherWallet = token.connect(walletTo);awaitexpect(tokenFromOtherWallet.transfer(wallet.address,1)).to.be.reverted;});it('Calls totalSupply on BasicToken contract',async()=>{await token.totalSupply();expect('totalSupply').to.be.calledOnContract(token);});it('Calls balanceOf with sender address on BasicToken contract',async()=>{await token.balanceOf(wallet.address);expect('balanceOf').to.be.calledOnContractWith(token,[wallet.address]);});});
yarn test
# 输出如下
yarn run v1.22.10
$ exportNODE_ENV=test && mocha
BasicToken
✓ Assigns initial balance
✓ Transfer adds amount to destination account(109ms)
✓ Transfer emits event(89ms)
✓ Can not transfer above the amount
✓ Can not transfer from empty account
✓ Calls totalSupply on BasicToken contract
✓ Calls balanceOf with sender address on BasicToken contract
7passing(2s)
✨ Done in7.70s.