A) Тестирование файла с помощью java-скрипта

Часть 1-Шаги-

1)npm установить -g мокко

2) тестовая команда — «npm test»

3) создайте каталог проекта, например, с именем температуры. В каталоге температуры мы создадим файл с именем app.js и папку с именем test. В тестовой папке создайте файл с именем test.js. Наконец, мы инициализируем наш проект, запустив npm init. Во время инициализации вашего проекта самым важным здесь является вопрос «тестовая команда:» — ответьте «мокко». Таким образом, мы можем запустить mocha, просто набрав npm test.

4) в package.jason должны быть -"скрипты": {
"test": "mocha"
},

5) в тестовом скрипте-

i) использовать библиотеку утверждений -

вар утверждать = требовать('утверждать');

assert.equal(-1, [1,2,3].indexOf(4),'Я не думаю, что это больше работает');

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

ii) для написания теста вам нужна специальная функция 1) it() или disscribe()

· description() — это просто способ сгруппировать наши тесты в Mocha. Мы можем вкладывать наши тесты в группы настолько глубоко, насколько мы сочтем это необходимым. description() принимает два аргумента, первый — это имя тестовой группы, а второй — функция обратного вызова.

description(‘string name’, function(){
// сюда можно вложить больше описательных(), или сюда помещаются тесты
});

· It() — используется для отдельного теста. it() следует писать так, как если бы вы произносили это вслух: «Должно быть равно нулю», «Он должен войти в систему пользователя» и т. д. it() принимает два аргумента, строку, объясняющую, что должен делать тест, и функция обратного вызова, которая содержит наш фактический тест:

it(‘должно быть бла-бла-бла’, function(){
// Здесь находится контрольный пример
});

Например-it('должен вернуть -1, если значение отсутствует', function(){
assert.equal(-1, [1,2,3].indexOf(4));
});

Полный код — https://github.com/pranavdaa/Testing-auditing_smart-contracts_using-js-Mocha/blob/master/regular-testing/1

Б) Тестирование приложения (централизованное) с помощью java-скрипта

Для этого все остальное то же самое, но мы должны сделать способ взаимодействия test.js и app.js(основной файл) для этого-https://github.com/pranavdaa/Testing-auditing_smart-contracts_using-js-Mocha/ дерево/мастер/обычное тестирование/2

Внутри app.js-

1. Мы собираемся создать пустой объект с именем convert let convert = {};

2. Вместо двух разных функций мы собираемся сделать каждую функцию методом нашего нового объекта convert.

3. В конце app.js мы собираемся выставить наш объект convert с помощью module.exports. Если вы никогда не использовали его раньше, module.exports — это то, как мы сообщаем JavaScript, какой объект вернуть в результате вызова require. Например-

пусть конвертировать = {};

convert.cToF = функция (по Цельсию) {

if(!Number.isInteger(celsius)) return undefined;

вернуть цельсий * 9 / 5 + 32;

}

convert.fToC = функция (по Фаренгейту) {

if(!Number.isInteger(по Фаренгейту)) return undefined;

возврат (по Фаренгейту — 32) * 5/9;

}

Также внесите изменения в test.js для подключения приложения.

пусть конвертировать = требуют(‘../app.js’)

C) Тестирование смарт-контракта с помощью javascript-

тестирование контракта может быть выполнено на двух языках, а именно на солидности и javascript, но я объясню то же самое на java-скрипте, потому что он относительно более стабилен, а мокко используется для тестирования приложений.

Основной подход. Чтобы проверить, правильно ли работает конкретный контракт или не присвоить некоторые значения контракту, функция и проверить конечный результат, приравняв для этого, мы возьмем, например, . полный код тестового контракта, а может обычный контракт - https://github.com/pranavdaa/Testing-auditing_smart-contracts_using-js-Mocha/tree/master/testing_with_smart-contract

1) Сначала создайте экземпляр смарт-контракта:

var HashMarket = артефакты.require(“./HashMarket.sol”);

контракт («HashMarket», функция (счета) {

2) имеют некоторые тестовые значения, например-

var itemName = «Элемент Теста»;

var itemPrice = 1000;

var itemSeller = аккаунты[0];

3) проверка функции на то, что она возвращает ту же функцию-.

4) приравнивая каждый аргумент, возвращаемый функцией, к нашему известному правильному значению.

// мы сделали эту переменную, которая назначается экземпляром смарт-контракта вне функции, чтобы другие функции также могли получить к ней доступ, например, // return hashMarketContract.getItem.call(itemID);

var hashMarketContract;

// Идентификатор элемента определяется снаружи, чтобы мы могли извлечь идентификатор элемента для использования другой функцией.//

var идентификатор элемента;

// это первая функция, в которой мы развернем смарт-контракт и извлечем артефакты или экземпляр смарт-контракта и ItemId.//

return HashMarket.deployed().then(функция(экземпляр) {

hashMarketContract = экземпляр;

// Подпишитесь на событие Solidity (ItemAdded), чтобы получить идентификатор, поскольку это событие определено в Solidity для предоставления (возвращения) идентификатора элемента//

instance.ItemAdded({}).watch((ошибка, результат) => {

если (ошибка) {

console.log(ошибка);

}

// После запуска события сохраняем результат во внешней переменной//

идентификатор элемента = результат.аргументы.идентификатор элемента;

});

// Вызов функции addNewItem для регистрации нашего элемента в массиве таким образом, что функция также проверяется, а другая функция может быть проверена, как и getItem, поскольку элемент теперь имеет эти значения, переданные нами, что является функцией, которую нужно проверить, возвращая обещание//

return instance.addNewItem(itemName, itemPrice, {from: itemSeller});

}).затем(функция() {

// Эта функция срабатывает после транзакции вызова addNewItem//

// выполнено. Теперь мы проверяем другую функцию с именем getItem, которая принимает itemID, который является переменной, которую мы получаем из события, в качестве входных данных.//

вернуть hashMarketContract.getItem.call(itemID);

})

//это функция, которая производит выходные данные, созданные в вышеупомянутых событиях, и используется для проверки.//

.затем (функция (результат) {

// Результатом getItem является кортеж, мы можем его деконструировать//

// к таким переменным//

var [имя, цена, продавец, статус] = результат;

// Начать тестирование. Используйте web3.toAscii() для преобразования результата //

// смарт-контракт из байт-кода Solidity в ASCII. После этого//

// используем .replace(), чтобы дополнить лишние байты от bytes32//

assert.equal(itemName, web3.toAscii(name).replace(//g, ‘’), «Имя не было правильно добавлено»);

// Используйте assert.equal() для проверки всех переменных//

assert.equal(itemPrice, price, «Цена была добавлена ​​неправильно»);

assert.equal(itemSeller, продавец, "Продавец не был правильно добавлен");

assert.equal(status, 0, "Статус добавлен неправильно");

});

});

});