首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试契约时的错误处理- TypeError:无法读取未定义属性的“长度”

测试契约时的错误处理- TypeError:无法读取未定义属性的“长度”
EN

Ethereum用户
提问于 2022-06-24 02:56:05
回答 1查看 319关注 0票数 0

在尝试测试FundMe合同时,我得到了以下错误。

以下是我的看法:

学习Blockchain,Solidity和Stack Web3 Development JavaScript -32小时课程,由Patrick在FreeCodeCamp YT频道上

我是在11:18在上面的课程中犯了这个错误。我几乎什么都试过了,但什么也帮不了我,我找到了问题所在。

问题:我在哪里发现测试文件中的问题?

对我来说,我不知道如何修复它,因为这个错误几乎和我在部署时遇到的问题相同,我只是在hardhat.config.js文件中添加了一些代码。但在测试中,我遇到了同样的问题,但不起作用。

代码语言:javascript
复制
namedAccounts: {
    deployer: {
        default: 0, // here this will by default take the first account as deployer
    },
},

为了我的FundMe.test.js

代码语言:javascript
复制
const { assert, expect } = require("chai")
const { deployments, network, ethers } = require("hardhat")

describe("FundMe", function () {
    let fundMe
    let mockV3Aggregator
    let deployer
    beforeEach(async () => {
        // const accounts = await ethers.getSigners()
        // deployer = accounts[0]
        deployer = (await getNamedAccounts()).deployer
        await deployments.fixture(["all"])
        fundMe = await ethers.getContract("FundMe", deployer)
        mockV3Aggregator = await ethers.getContract(
            "MockV3Aggregator",
            deployer
        )
    })

    describe("constructor", function () {
        it("sets the aggregator addresses correctly", async () => {
            const response = await fundMe.getPriceFeed()
            assert.equal(response, mockV3Aggregator.address)
        })
    })
})

这里是错误:

代码语言:javascript
复制
  FundMe
    constructor

      1) "before each" hook for "sets the aggregator addresses correctly"


  0 passing (1s)
  1 failing

  1) FundMe
       "before each" hook for "sets the aggregator addresses correctly":
   
   ERROR processing /Users/namnguyen/Workspace/blockchain/smart-contract-programming/hardhat-fund-me/deploy/01-deploy-fund-me.js:
TypeError: Cannot read property 'length' of undefined
    at getFrom (/Users/namnguyen/Workspace/blockchain/smart-contract-programming/hardhat-fund-me/node_modules/hardhat-deploy/src/helpers.ts:1713:14)
    at fetchIfDifferent (/Users/namnguyen/Workspace/blockchain/smart-contract-programming/hardhat-fund-me/node_modules/hardhat-deploy/src/helpers.ts:939:38)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
    at runNextTicks (internal/process/task_queues.js:64:3)
    at listOnTimeout (internal/timers.js:526:9)
    at processTimers (internal/timers.js:500:7)
    at _deployOne (/Users/namnguyen/Workspace/blockchain/smart-contract-programming/hardhat-fund-me/node_modules/hardhat-deploy/src/helpers.ts:1002:24)
    at Object.module.exports [as func] (/Users/namnguyen/Workspace/blockchain/smart-contract-programming/hardhat-fund-me/deploy/01-deploy-fund-me.js:13:34)
    at DeploymentsManager.executeDeployScripts (/Users/namnguyen/Workspace/blockchain/smart-contract-programming/hardhat-fund-me/node_modules/hardhat-deploy/src/DeploymentsManager.ts:1219:22)
    at DeploymentsManager.runDeploy (/Users/namnguyen/Workspace/blockchain/smart-contract-programming/hardhat-fund-me/node_modules/hardhat-deploy/src/DeploymentsManager.ts:1052:5)
  Error: ERROR processing /Users/namnguyen/Workspace/blockchain/smart-contract-programming/hardhat-fund-me/deploy/01-deploy-fund-me.js:
  TypeError: Cannot read property 'length' of undefined
      at getFrom (node_modules/hardhat-deploy/src/helpers.ts:1713:14)
      at fetchIfDifferent (node_modules/hardhat-deploy/src/helpers.ts:939:38)
      at processTicksAndRejections (internal/process/task_queues.js:95:5)
      at runNextTicks (internal/process/task_queues.js:64:3)
      at listOnTimeout (internal/timers.js:526:9)
      at processTimers (internal/timers.js:500:7)
      at _deployOne (node_modules/hardhat-deploy/src/helpers.ts:1002:24)
      at Object.module.exports [as func] (deploy/01-deploy-fund-me.js:13:34)
      at DeploymentsManager.executeDeployScripts (node_modules/hardhat-deploy/src/DeploymentsManager.ts:1219:22)
      at DeploymentsManager.runDeploy (node_modules/hardhat-deploy/src/DeploymentsManager.ts:1052:5)
      at DeploymentsManager.executeDeployScripts (node_modules/hardhat-deploy/src/DeploymentsManager.ts:1222:19)
      at processTicksAndRejections (internal/process/task_queues.js:95:5)
      at runNextTicks (internal/process/task_queues.js:64:3)
      at listOnTimeout (internal/timers.js:526:9)
      at processTimers (internal/timers.js:500:7)
      at DeploymentsManager.runDeploy (node_modules/hardhat-deploy/src/DeploymentsManager.ts:1052:5)
      at Object.fixture (node_modules/hardhat-deploy/src/DeploymentsManager.ts:315:9)
      at Context.<anonymous> (test/unit/FundMe.test.js:12:9)

谢谢你的帮忙!

EN

回答 1

Ethereum用户

发布于 2022-08-25 10:08:26

通常,这是因为文件namedAccount中缺少hardhat.config.js的配置。配置告诉插件hardhat-deploy它应该使用哪个帐户来部署合同。

检查hardhat.config.js,并将下面的代码片段添加到文件中:

代码语言:javascript
复制
  namedAccounts: {
    deployer: {
      default: 0, 
      1: 0, 
    },
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/130676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档