Как и многие другие, которые замочили ноги с разработкой Ethereum и тестированием контрактов Ethereum, я провел много ночных часов, пытаясь понять, как добиться цели.

Документация, сообщения в Интернете и новостные статьи давали некоторую информацию, а во многих случаях просто просмотр чужих проблем вдохновлял.

Эта статья рассказывает о том, как я получил ОЧЕНЬ простой контракт Ethereum для работы с Truffle. Я пишу это после момента ага и хочу поделиться опытом, помочь другим проявить настойчивость и двигаться дальше в развитии Ethereum.

Сначала я написал контракт, который просто получает и устанавливает значение. Текст договора ниже:

прочность прагмы ^0.4.18;

contract basicsum {
uint x;

набор функций (uint y) public {
x = y;
}

функция get() константная общедоступная возвращает(uint) {
return x;
}
}

Функция set() изменит переменную x. Функция get вернет значение x.

Скопируйте и вставьте приведенный выше код в https://remix.ethereum.org, чтобы убедиться, что код работает и не имеет проблем с синтаксисом.

Теперь сложная часть…и здесь я делаю несколько прыжков, так как по этой части уже есть отличные статьи. Затем я установил TRUFFLE на свой ноутбук и убедился, что могу запустить пару учебных пособий. http://truffleframework.com/

После установки я настроил проект Truffle, который можно было скомпилировать. Конечным результатом было то, что у меня был каталог с работающим проектом Truffle, который можно было скомпилировать и развернуть. ….. Теперь все в порядке.

Структура каталогов и файлы для проекта до написания тестового сценария Truffle js приведены ниже:

Напишите файл с именем basic.js и ПОМЕСТИТЕ ЕГО В тестовую директорию. Я ошибся в местоположении и часами пытался понять, что пошло не так.

Текст файла выше можно найти ниже, так что просто скопируйте и вставьте для собственного обучения.

// Конкретно запрашиваем абстракцию для basicsum
var basicsum = артефакты.require("basicsum");

contract('basicsum', function() {

//Сообщает вам имя, если тест, который мы хотим выполнить,
it("Проверьте, что контракт начинается с 0", function() {
// Развертываем контракт и ссылаемся на него через переменную с именем bs
return basicsum.deployed().then(function(bs) {
// Вызываем функцию get, мы ожидайте получить значение здесь
return bs.get.call();
//Возьмем результат вызова функции в переменную с именем bsoutput
}).then(function(bsoutput ) {
//Возьмем значение, найденное в bsoutput, и сравним с assert равным ожидаемым значениям
assert.equal(bsoutput.toNumber(), 0, «Get не вернул 0»);
});
});

//Проверка значения контракта из get начинается с 0
it("Проверить, что значение контракта может изменяться и сохранять значение", function() {
return basicsum.deployed().then(function (bs) {
bs.set(4);
return bs.get.call();
}).then(function(bsoutput) {
ожидаемая переменная = 4 ;
assert.equal(bsoutput.toNumber(), ожидаемо, «Get не вернул 4»);
});
});
})

Так что же делает этот код? Онлайн-учебники и документы не помогли мне понять на простом английском языке. Я надеюсь, что приведенные ниже примеры (которые действительно работают!) помогут вам выполнить те же шаги и узнать, как заставить базовое тестирование работать.

var basicsum = артефакты.require("basicsum");

Эта строка указывает Truffle добавить базовую сумму контракта, которую мы построили в начале этой статьи. Все последующие строки зависят от этой первой строки.

Конструкция, следующая в строках с 5 по 31, содержит ссылку на контракт с базовой суммой и два теста.

contract('basicsum', function() {

})

Это определение, которое Truffle должно ссылаться на контракт с базовой суммой. Следующие тесты будут ссылаться на этот контракт. На этом этапе вы можете запустить команду truffle test, и она должна работать без проблем.

Затем добавьте тест.

//Сообщает вам имя, если тест, который мы хотим выполнить,
it("Проверьте, что контракт начинается с 0", function() {
// Разверните контракт и укажите его через и переменная с именем bs
return basicsum.deployed().then(function(bs) {
//Вызов функции get, здесь мы ожидаем получить значение
return bs.get.call( );
//Возьмем результат вызова функции в переменную с именем bsoutput
}).then(function(bsoutput) {
//Возьмем значение из bsoutput и сравним с assert равно ожидаемым значениям
assert.equal(bsoutput.toNumber(), 0, «Get не вернул 0»);
});
});

Самый простой формат и шаблон, с которым я работал, был представлен ниже. Код.

it("НАЗВАНИЕ ТЕСТА", function() {

//ДЕЙСТВУЙТЕ ЗДЕСЬ, И ВОЗВРАТ ПЕРЕЙДЕТ В СЛЕДУЮЩИЙ РАЗДЕЛ

}).then(function(RETURN_VALUE) {

//СМОТРИМ ЗНАЧЕНИЕ В RETURN_VALUE И ПРОВЕРЯЕМ ЕГО ЗНАЧЕНИЕ

});
});

Опыт обучения здесь заключался в том, что мне нужно было сначала развернуть контракт и использовать ключевое слово return, чтобы передать этот контракт принимающей переменной. Строка 10 развертывает контракт и передает ссылку на развернутый контракт в переменную с именем bs. Затем в строке 12 используется bs для запуска вызова функции get в basicsum. Затем результат вызова функции передается (строка 14) в другую переменную с именем bsoutput.

Для меня это был ОГРОМНЫЙ скачок в логике по сравнению с другими языками и разработкой. Последней проверкой является вызов строки 16 для проверки значения возвращаемой переменной. Поскольку мое возвращаемое значение в контракте с базовой суммой является целым числом, мне нужно преобразовать это значение в числовое значение. Это то, что делает bsoutput.toNumber().

Теперь последнее испытание.

Из терминала перейдите в каталог, в котором находится ваш проект truffle, и запустите truffle test ./test/basic.js, вы также можете просто использовать truffle test, но я предпочитаю быть конкретным.

Чтобы получить это далеко с нуля методом проб и ошибок, потребовалось почти 12 часов.

Так что наберитесь терпения, будьте логичны и настойчивы. Чувство выполненного долга, когда вы получаете эту работу является большим.