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, "Статус добавлен неправильно");
});
});
});