Как да започнете да тествате своя верижен код на Hyperledger Fabric Nodejs

Забележка: След написването на тази статия, нашият модул е ​​преминал през някои промени и актуализации. Моля, проверете github за най-новата информация.

Тази статия е втора част от нашите статии „как да хиперлегирана фабрика nodejs верижен код“. Последната статия беше за разработването на верижния код, за който написахме пакет. Това прави писането на верижен код много по-бързо.

Все още нямаше добро решение за тестване на веригата на nodejs. Ето защо създадохме пакета mockstub. За да бъда честен, не обичам да тествам. Но тъй като обновяването на верижния код не е най-бързото нещо в света, има много време да бъдете запазени за тестване. Освен това по-важното е, че Blockchain е неизменен и трябва да е защитен, тъй като кодът е в мрежата, по-скоро не оставяме недостатъци в нашия код.

Тестване с помощта на нашата mockstub

Този ChaincodeMockStub е макетно изпълнение на тъканта за подстригване на плат. Това означава, че можете да тествате своя верижен код, без всъщност да стартирате мрежата си. Той изпълнява почти всяка функция, която действителната мъничка върши, но в паметта. Само тези функции не се поддържат (все още): getHistoryForKey, getBinding, getTransient, setEvent, getChannelID.

Как да тествам

прежда добавете @ theledger / fabric-mock-stub --dev

Тестване на веригата на Nodejs работи подобно на тестване с помощта на mockstub във верижния код Golang. ChaincodeMockStub има 2 важни макетни функции mockInitand mockInvoke. Предавайки вашия верижен код, той ще се подиграва с транзакция и ще извърши извикване / init подобно на начина, по който първоначално ще бъде извикан.

отговор

И двете тези функции ще върнат ChaincodeResponse. Използвайки този обект ChaincodeResponse, можем да проверим дали действието върна очакван резултат.

При успех отговорът ще изглежда така. Той винаги връща състояние и ако методът върне нещо, отговорът ще съдържа и полезен товар.

{
    „статус“: 200,
    "полезен товар": 
}

При грешка отговорът ще изглежда така. Полезният товар ще бъде заменен от поле за съобщение, съдържащо грешката.

{
    „статус“: 500,
    "съобщение": 
}

Ще можете да потвърдите отговора, като използвате нещо като chai. Използваната тук трансформация е помощник, който се доставя с макетната лента за лесно сериализиране и десериализиране на данни.

Включете своя верижен код

В горната част на вашия тестов файл можете да импортирате и инсталирате своя верижен код, това трябва да направите само веднъж. Уверете се, че сте отделили shim.start () от вашия верижен код. В противен случай тя ще бъде изпълнена преди тестване и ще се появят грешки. Пример можете да намерите в нашата мрежова котелна плоча.

Включете макета

След това във вашите тестове можете да създадете нов макет. Трябва да предадете произволно име (което не е важно в момента) и вашият верижен код.

От вас зависи дали искате да създадете нов макет за всеки тест или да споделите такъв за всички тестове. Споделянето на един за всички тестове ще запази предишното ви състояние в паметта. Ако не искате това, създайте нов за всеки тест. Имайте това предвид.

пример

Тест ще изглежда така. Сега просто ни трябва някаква логика за тестване.

Тест Инит

Методът Init () може да бъде тестван с помощта на функцията mockStub.mockInit (txId: string, args: string []). Той ще създаде нова макетна транзакция и ще извика метода на init на вашия верижен код. Тъй като init се случва при създаването на вашия верижен код, обикновено не искате да върне нищо. Така че проверяваме състоянието на отговора тук.

Тест Invoke

Методът Invoke () може да бъде тестван с помощта на функцията mockStub.mockInvoke (txId: string, args: string []). Той ще създаде нова макетна транзакция и ще извика метода на извикване на вашия верижен код. Клиентът ще изпрати запитване или извикване, но верижният код ще приеме и двете като извикване. Във вашите тестове няма никаква разлика, както извикванията, така и заявките могат да върнат резултат.

Тест queryCar

Тествайте createCar

TheLedger - Blockchain експерти / консултанти в Белгия и Холандия.

Тестване на отделни класове

Не се изисква да тествате само с mockInvoke и mockInit. Можете директно да се обадите на методите на вашия верижен код или на mockStub, ако наистина искате.

Тестване с помощта на Mychaincode директно

Забележка, когато използвате това, в зависимост от това какво връщате във вашата функция, ще можете да получите буфер или обект в тестовете си. Това се обсъжда в горната част на този блог.

заключение

Чувам те, мразя и тестове за писане. Но мисля, че тъканта на подложката наистина се нуждаеше от това. В крайна сметка бих искал да го добавя към реалния пакет за покритие на плат, подобно на макетната платка, която се доставя с подстригването Golang. Или поне преместете поддръжката към фондация Hyperledger. За да направите това, има още няколко функции за изпълнение. И пакетът трябва да бъде внимателно тестван, затова ви насърчавам да допринесете за него! #makeTestingGreatAgain

Ние не сме специализирани само в плат за хиперлегинг. Също така правим продажби на жетони, интелигентни одити на договори и други готини неща. Свържете се с TheLedger.

Какво да чета по-нататък

→ Factor & couchdb за Hyperledger, фантастични въпроси и къде да намерите ...

→ Избран списък с ресурси на Hyperledger Fabric

→ Bring-Your-Own-Standard на Blockchain