Осваиваем web 3, часть 2 — тестирование смарт-контрактов

Давайте продолжим нашу серию руководств из этой Части 1, мы сделали наш первый смарт-хелло-контракт, и мы уже успешно скомпилировали. И на следующем этапе мы должны протестировать наш код, чтобы убедиться, что то, что мы пишем в файле Solidity, соответствует нашим ожиданиям.

В Hardhat нам нужно снова добавить некоторые библиотеки и не забудьте оставить их в нашей среде разработки.

$ yarn add -D @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-waffle ethereum-waffle chai

Затем вы также можете добавить конфигурацию машинописного текста, например:

$ yarn add --save-dev ts-node typescript

В последнем вы должны добавить типы тестирования, и большинство разработчиков смарт-контрактов будут использовать chai в качестве основных библиотек тестирования (в этом случае нам также нужна конфигурация typescript для chai).

$ yarn add --save-dev chai @types/node @types/mocha @types/chai

Поскольку мы уже установили и будем реализовывать некоторый машинописный текст, не забудьте изменить файл hardhat.config.js на hardhat.config.ts. Он автоматически изменит наш файл на файл на основе машинописного текста. После этого добавьте в начало строки из файла hardhat.config.ts этот код:

Тестовый контракт

Теперь давайте напишем несколько тестов. Помните, что, основываясь на нашем предыдущем объяснении структуры проекта, мы должны создать папку test перед созданием тестовых файлов. Затем вы можете назвать тестовый файл (файлы) как хотите (не забывайте, что мы использовали файл на основе машинописного текста).

Импортируйте каску Nomiclabs (вы можете увидеть ее здесь для более подробного объяснения), но упрощение его, это плагин, который позволяет нам взаимодействовать с блокчейном Ethereum простым способом (если у вас есть опыт использования Truffle, он будет необходимо запустить локальный блокчейн перед запуском всех сервисов Truffle), поэтому Hardhat немного удобен лично для меня и защищает использование моей памяти, когда я разрабатываю блокчейн на нашем локальном компьютере. »), как работает каска?

Поток, который выполняется в нашем тестовом файле, будет устанавливать связь с нашими скомпилированными контрактами (ABI), которые сохранены в папке artifacts/contracts.

И тогда двоичный код будет взаимодействовать с узлом Ethereum.
Итак, вот тест кода, который мы будем использовать для проверки нашего смарт-контракта, а затем вызовем нашу функцию hello(). Вот код:

Затем запустите:

$ npx hardhat test

Сначала вы увидите ошибку, вот так (надеюсь, она будет решена), а затем вы просто снова запускаете рекомендательные команды по этой ошибке, или вы можете выполнить шаг ниже о том, что должно быть написано в нашей команде линия.

Для решения этой ошибки вы можете добавить эту команду:

$ yarn add -D ts-node
...
//After done, run test again
$ npx hardhat test

И вот что должно получиться:

Заключение

Итак, что только что произошло? Прежде всего, простое объяснение заключается в том, что мы тестируем нашу функцию внутри нашего смарт-контракта до того, что называется hello(), поэтому функция hello() будет запущена и предоставит строку «Hello, World from Web3», если мы изменим наш тест другой строкой, это вызовет ошибку. ошибка и тест провален.

И для большего пояснения, где мы можем взаимодействовать с нашим смарт-контрактом? Я не вижу, чтобы что-то работало вне нашего проекта. Да, это правда. Hardhat может мгновенно запускать блокчейн Ethereum в соответствии с нашей целью.

Итак, если вы видите в нашей последней строке кода, которая вызывает функцию hello(), это сила каски, которая может заставить сеть Ethereum виртуально работать внутри нашего проекта, вызовите функцию hello(), чтобы показать строку «Hello, World from Web3» для тестирования.