Не удалось импортировать эфиры через Hardhat, несмотря на официальную документацию по тестированию.

Согласно официальной тестовой документации Hardhat, ethersдолжен быть доступен неявно в глобальной области видимости; однако при желании это может быть required явно, вот так:

      const { ethers } = require("hardhat");

Это не подходит для моего местного проекта.

Манифест моего пакета, похоже, включает правильные зависимости:

      {
  "dependencies": {
    "@nomiclabs/hardhat-ethers": "^2.0.1",
    "@nomiclabs/hardhat-waffle": "^2.0.1",
    "@openzeppelin/contracts": "https://github.com/OpenZeppelin/openzeppelin-contracts#v4.0.0-beta.0",
    "chai": "^4.3.1",
    "hardhat": "^2.0.11"
  }
}

Мой файл модульных тестов также соответствует рабочему примеру в документации Hardhat:

      const { ethers } = require("hardhat");
const { expect } = require("chai");

describe("Distributor.sol", function() {
    it("Distribution should fail for non-owners", async function() {
        const DistributorFactory = await ethers.getContractFactory("Distributor");
        const Distributor = await Distributor.deploy();

        Distributor.distribute([], []);

        expect(await hardhatToken.totalSupply()).to.be.revertedWith("foobar");
    });
});

Несмотря на это, выполнение тестов не удается:

      $ yarn hardhat test
yarn run v1.22.5
$ /home/bob/dev/misc/token-distributor/node_modules/.bin/hardhat test


  Distributor.sol
undefined
    1) Distribution should fail for non-owners


  0 passing (9ms)
  1 failing

  1) Distributor.sol
       Distribution should fail for non-owners:
     TypeError: Cannot read property 'getContractFactory' of undefined
      at Context.<anonymous> (test/Distributor.js:8:49)
      at processImmediate (internal/timers.js:461:21)



error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Как я могу это исправить?

3 ответа

Две вещи:

  1. вам нужно установить ethersотдельно тоже, как указано в инструкции для hardhat-ethers, например
    npm install --save-dev @nomiclabs/hardhat-ethers 'ethers@^5.0.0'

  2. Каждый плагин Hardhat необходимо зарегистрировать в файле конфигурации Hardhat ( hardhat.config.js):
    require("@nomiclabs/hardhat-ethers");

Нет необходимости удалять явный импорт в вашем тестовом файле, однако в документации Hardhat рекомендуется следовать этому стилю:

      const hre = require("hardhat);
const { ethers } = hre;

Добавьте требование в свой hardhat.config.js

      require("@nomiclabs/hardhat-waffle");

И удалите эту строку из тестового файла:

      const { ethers } = require("hardhat");

Затем вы можете использовать в своих тестах. Прежде чем запускать тесты, Hardhat просматривает конфигурацию. Если вам нужен пакет, который включает ethers вы можете использовать его в глобальном масштабе.

Он все еще показывает ошибку,reading ethers undefined, я снова начал проект сyarn hardhatи выбрал первый вариант «Создать простой проект», и он отлично работает.

Другие вопросы по тегам