You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hardhat测试报错:".deploy() is not a function" 求助

问题原因及解决方法

核心错误原因

你遇到的TypeError: ".deploy() is not a function"主要由以下几个新手常见问题导致:

  1. 合约文件名与合约名称不匹配
    Hardhat默认会在contracts目录下寻找与合约名完全同名的.sol文件。如果你的合约文件不是SayHello.sol(比如误命名为Hello.sol),ethers.getContractFactory("SayHello")无法加载到正确的合约字节码,返回的对象不包含deploy()方法,直接触发报错。

  2. 依赖未完整安装
    如果没有正确安装@nomicfoundation/hardhat-toolbox及其关联依赖,可能导致ethers对象的getContractFactory方法返回异常,进而无法调用deploy()。

  3. 测试代码存在额外问题(虽不直接导致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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:34:52