Цель этого блога — задокументировать процесс моего обучения на этом учебном курсе Blockchain 2022 года от DApp University. Завершающим проектом этого курса является создание сайта обмена DApp Crypto. Тестовый файл написан на JavaScript.

Что я узнал из этой лекции:

  1. Использование библиотеки утверждений hardhat и chai, особенно с использованием expect, для тестирования смарт-контракта. В начало файла тестера нам нужно добавить строку
const { ethers } = require("hardhat");
const { expect } = require("chai");

2. Настройте функции для тестирования, используя контейнер для тестов с именем describe. Describe — это функция в средах тестирования mocha.js и jasmine, которая описывает набор тестовых случаев, перечисленных в itfunctions. Шаблон для тестирования

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