Hardhat测试报错:".deploy() is not a function" 求助
问题原因及解决方法
核心错误原因
你遇到的TypeError: ".deploy() is not a function"主要由以下几个新手常见问题导致:
合约文件名与合约名称不匹配
Hardhat默认会在contracts目录下寻找与合约名完全同名的.sol文件。如果你的合约文件不是SayHello.sol(比如误命名为Hello.sol),ethers.getContractFactory("SayHello")无法加载到正确的合约字节码,返回的对象不包含deploy()方法,直接触发报错。依赖未完整安装
如果没有正确安装@nomicfoundation/hardhat-toolbox及其关联依赖,可能导致ethers对象的getContractFactory方法返回异常,进而无法调用deploy()。测试代码存在额外问题(虽不直接导致deploy错误,但会影响后续测试)
- 变量名拼写错误:
myContact应为myContract(笔误) - 断言值不匹配:测试中预期的
"tmam"和合约内实际的"SayHello MM"不一致,会导致后续测试失败 - 未导入
chai的expect方法:Hardhat测试环境不会自动全局注入expect,未导入会导致后续断言报错
解决步骤
1. 检查并修正合约文件名
确保你的合约文件名为SayHello.sol,且存放在项目根目录的contracts文件夹下(Hardhat默认合约目录)。
2. 重新安装依赖
在项目根目录执行以下命令,确保所有依赖正确安装:
npm install
3. 修正测试代码
将测试代码修改为以下内容:
const { expect } = require("chai"); describe("Testing the Say Hello contract", () => { let myContract; beforeEach(async () => { const ContractSayHello = await ethers.getContractFactory("SayHello"); myContract = await ContractSayHello.deploy(); await myContract.deployed(); }); it("should return the correct greeting string", async () => { expect(await myContract.sayHi()).to.equal("SayHello MM"); }); });
4. 重新运行测试
执行命令重新测试:
npx hardhat test
内容的提问来源于stack exchange,提问作者MAbdelkader
相关产品推荐
相关产品推荐

