Hardhat测试报错:TypeError无法读取undefined的getBalance属性
解决Hardhat测试中
Cannot read properties of undefined (reading 'getBalance')错误 错误原因
报错核心是代码中错误解构了waffle.provider:
const { provider } = waffle.provider;
waffle.provider本身就是一个Provider实例,并非包含provider属性的对象。解构操作会试图从waffle.provider中读取provider属性,结果必然是undefined,调用undefined.getBalance()就会触发该错误。
另外测试用例里存在笔误:console.log(BUSD_WHALES);中的变量名应为BUSD_WHALE(多了个s),后续运行也会报错,建议一并修正。
解决方案
1. 修正Provider的获取方式
将错误的解构代码替换为以下任意一种:
- 使用waffle的provider:
const provider = waffle.provider; - 或直接使用ethers内置的provider(更推荐,无需依赖waffle):
const provider = ethers.provider;
2. 修正变量名笔误
将测试用例中的BUSD_WHALES改为BUSD_WHALE。
修正后的完整代码
const { expect, assert } = require("chai"); const { ethers, waffle } = require("hardhat"); const { impersonateFundErc20 } = require("../utils/utilities"); const { abi } = require("../artifacts/contracts/interfaces/IERC20.sol/IERC20.json"); // 修正provider获取方式 const provider = waffle.provider; // 或者用 const provider = ethers.provider; describe("FlashSwap Contract", ()=>{ let FLASHSWAP, BORROW_AMOUNT, FUND_AMOUNT, initialFundingHuman, txArbitrage, gasUsedUSD; const DECIMALS = 18; const BUSD_WHALE = "0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503"; const BUSD = "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"; const CAKE = "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82"; const USDT = "0x55d398326f99059fF775485246999027B3197955"; const CROX = "0x2c094F5A7D1146BB93850f629501eB749f6Ed491"; const BASE_TOKEN_ADDRESS = BUSD; const tokenBase = new ethers.Contract(BASE_TOKEN_ADDRESS, abi, provider); beforeEach(async()=>{ [owner] = await ethers.getSigners(); const whale_balances = await provider.getBalance(BUSD_WHALE); expect(whale_balances).not.equal("0"); }); it("test", async () =>{ // 修正笔误 console.log(BUSD_WHALE); }); });
内容的提问来源于stack exchange,提问作者Lokesh Tuli
相关产品推荐
相关产品推荐

