Что ж, это не пост о кофе мокко, как показано на изображении выше. На этот раз мы расскажем немного больше о MochaJS, пакете NPM в NodeJS, используемом для выполнения тестирования. MochaJS - это полнофункциональная среда тестирования, созданная специально для JavaScript, и когда мы пишем наш смарт-контракт с использованием TruffeJS, это означает, что мы можем использовать эту структуру для выполнения тестирования всех функций, содержащихся в смарт-контракте.
Хотя этот пост не предназначен специально для Mocha (более подробно вы можете прочитать об этом на www.mochajs.org), мы просто создадим небольшой пост об использовании Mocha для тестирования. В предыдущем посте мы провели множество тестов наших функций смарт-контрактов (https://daneswa.medium.com/solidity-smart-contract-interaction-and-testing-with-web3-js-and-mocha-3a0467a01805? source = user_profile --------- 0 ----------------------------) , поэтому, пожалуйста, проверьте это сообщение на наличие более полное прохождение игры. Мы постараемся объяснить использование Mocha для целей тестирования настолько просто, насколько это возможно, поскольку тестирование очень важно при написании смарт-контрактов, поскольку оно потребует реальных денег при развертывании смарт-контрактов, даже при отправке функции / транзакции в MainNet будет стоить реальных денег.
Прежде всего нам нужно установить модуль Mocha для тестирования.
npm install mocha --save
Затем импортируйте все необходимые модули и передайте их переменным;
const asset require ('assert');
Мы будем использовать очень простой класс JavaScript под названием Car.
class Car { start() { return 'Car is started'; stop() { return 'Car is stopped'; }
У класса Car будет 2 функции; park () и stop (). Теперь мы протестируем функцию с помощью методов assert () в Mocha, поэтому при вызове функций класса они будут генерировать те же значения, что и значения, определенные в критериях тестирования.
MochaJS имеет 3 компонента каждый раз, когда он выполняет тестирование;
- beforeEach () - будет указываться перед всеми методами тестирования, обычно содержит все повторяющиеся аргументы / методы, так что команды будут выполняться только один раз перед выполнением других команд.
- describe () - в основном группа функций тестирования
- it () - каждый критерий тестирования, который содержит все функции для выполнения тестирования.
Мы создадим еще один экземпляр из класса Car
car = new Car();
А поскольку для каждой функции тестирования нам нужно объявить этот экземпляр, мы создаем глобальную функцию для car и передаем объявление экземпляра в оператор beforeEach ().
let car; beforeEach( () => { car = new Car; });
Теперь мы хотим создать функции тестирования для каждой функции класса, передав их в методы assert.
describe('Car', () => { it('can start', () => { assert.equal(car.start(), 'Car is started'); it('can stop', () => { assert.equal(car.stop(), 'Car is stopped'); }
Обратите внимание, что мы используем assert.equal () для проверки того, что выходные данные методов класса соответствуют критериям тестирования, указанным во втором аргументе, в данном случае «Автомобиль запущен» и «Автомобиль остановлен». ).
Полный код тестирования будет выглядеть следующим образом:
const asset require ('assert'); class Car { start() { return 'Car is started'; stop() { return 'Car is stopped'; } let car; beforeEach( () => { car = new Car; }); describe('Car', () => { it('can start', () => { assert.equal(car.start(), 'Car is started'); it('can stop', () => { assert.equal(car.stop(), 'Car is stopped'); }
После написания сотен строк кода тестирование иногда является утомительной задачей, а иногда в очень большой команде у нас есть привилегия передать наш код QA / Testing для выполнения всех задач тестирования. Однако при работе со смарт-контрактами, где задействованы реальные деньги, иногда нам, как разработчику, необходимо подумать о логике, лежащей в основе того, что мы хотим, и о том, как мы хотим самостоятельно тестировать функции в нашем смарт-контракте.