Цель этого блога — задокументировать процесс моего обучения на этом учебном курсе Blockchain 2022 года от DApp University. Завершающим проектом этого курса является создание сайта обмена DApp Crypto. Тестовый файл написан на JavaScript.
Что я узнал из этой лекции:
- Использование библиотеки утверждений hardhat и chai, особенно с использованием
expect
, для тестирования смарт-контракта. В начало файла тестера нам нужно добавить строку
const { ethers } = require("hardhat"); const { expect } = require("chai");
2. Настройте функции для тестирования, используя контейнер для тестов с именем describe
. Describe — это функция в средах тестирования mocha.js и jasmine, которая описывает набор тестовых случаев, перечисленных в it
functions. Шаблон для тестирования
describe('...', ()=> { it('...', async()=> { //some tester code }) })
3. Прежде чем мы сможем каждый раз тестировать каждую функцию, нам нужно развернуть контракт. Чтобы каждый раз не повторять коды, мы помещаем код развертывания внутрь beforeEach
4. Базовой единицей валюты в Solidity является Wei, то есть 1 ether = 10^18 wei
. Чтобы упростить разработку во время тестирования, мы можем создать функцию, которую мы можем использовать для преобразования значения эфира в wei.
const tokens = (n)=> { return ethers.utils.parseEther(n.toString()); }
5. После рефакторинга и создания тестов для развертывания токена код будет выглядеть примерно так:
const { ethers } = require('hardhat'); const { expect } = require('chai'); const tokens = (n) => { return ethers.utils.parseEther(n.toString()); } describe('Token', () => { let token; beforeEach(async() => { //Fetch token from blockchain const Token = await ethers.getContractFactory('Token'); token = await Token.deploy('DApp University', 'DAPP', 1000000); }) describe('Deployment', () => { const name = 'DApp University'; const symbol = 'DAPP'; const decimals = 18; const totalSupply = tokens('1000000'); it('has correct name', async() => { expect(await token.name()).to.equal(name); }) it('has correct total supply', async() => { expect(await token.totalSupply()).to.equal(totalSupply); }) // Other tests for deployment state })
6. Для проверки: > npx hardhat test