在编写单元测试时,我使用了Hardhat的主板分叉,对于测试,我想断言owner帐户的初始DAI余额是0。但是,当代码到达断言assert(ownerDai.isZero());时,断言失败。下面是一个测试:
const { assert } = require("chai");
const { ethers } = require("hardhat");
const ERC20ABI = require('../external_ABI/ERC20.json'); // ERC20 abi for interacting with DAI
const DAI_ADDRESS = "0x6b175474e89094c44da98b954eedeac495271d0f";
describe("SimpleTest", function () {
it("Test that owner DAI balance is 0", async function () {
const provider = ethers.provider;
const [owner] = await ethers.getSigners();
const DAI = new ethers.Contract(DAI_ADDRESS, ERC20ABI, provider);
ownerDaiBalance = await DAI.balanceOf(owner.address);
assert(ownerDaiBalance.isZero()); // Assertion fails here
});
});如果我打印ownerDaiBalance来控制台,它就会显示余额实际上等于10008133730236507217。为什么ownerDaiBalance非零开始?
发布于 2022-02-20 01:03:49
我发现,在代码块#14189520,这是我要分叉的块,owner帐户实际上在Ethereum上有一些DAI。这只是价值10美元的DAI,但这也解释了为什么我的初始余额是1000813373023650721,而不是预期的0。
我将owner添加到我的Metamask帐户中,结果发现owner还有其他ERC20令牌:

我想现在的煤气费太高了,任何人都不能考虑把这些资金转移出去。
无论如何,作为解决办法,我添加了addr1作为单元测试的第二个帐户,它一开始没有任何DAI:
const [owner, addr1] = await ethers.getSigners();https://stackoverflow.com/questions/71190549
复制相似问题