Jak začít testovat řetězový kód Hyperledger Fabric Nodejs

Poznámka: Od psaní tohoto článku prošel náš modul několika změnami a aktualizacemi. Podívejte se na nejnovější informace o githubu.

Tento článek je druhou částí našich článků „Jak na řetězový kód společnosti Hyperledger Fabric nodejs“. Poslední článek se týkal vývoje řetězového kódu, pro který jsme napsali balíček. Díky tomu je psaní řetězového kódu mnohem rychlejší.

Pro testování řetězového kódu nodejs zatím nebylo dobré řešení. Proto jsme vytvořili balíček mockstub. Abych byl upřímný, taky nemám rád testování. Protože však upgrade řetězového kódu není nejrychlejší věcí na světě, je třeba ušetřit spoustu času na testování. A co je důležitější, protože Blockchain je neměnný a měl by být bezpečný, protože kód je v síti, raději v našem kódu nezanecháváme nedostatky.

Testování pomocí našeho simulátoru

Tento ChaincodeMockStub je falešnou implementací textilního podložky. To znamená, že můžete otestovat svůj řetězový kód bez skutečného spuštění sítě. Implementuje téměř každou funkci, kterou skutečný pahýl provádí, ale do paměti. Pouze tyto funkce nejsou (zatím) podporovány: getHistoryForKey, getBinding, getTransient, setEvent, getChannelID.

Jak testovat

příze přidat @ theledger / tkanina-zesměšňovat - dev

Testování Nodejsova řetězového kódu funguje podobně jako testování pomocí makety v řetězovém kódu Golang. ChaincodeMockStub má 2 důležité falešné funkce mockInitand mockInvoke. Tím, že předáte svůj řetězový kód, bude zesměšňovat transakci a provést vyvolání / iniciaci podobně, jak se původně bude volat.

Odezva

Obě tyto funkce vrátí ChaincodeResponse. Pomocí tohoto objektu ChaincodeResponse můžeme otestovat, zda akce vrátila očekávaný výsledek.

Po úspěchu bude odpověď vypadat takto. Vždy vrací stav a pokud metoda něco vrátí, bude odpověď obsahovat také užitečné zatížení.

{
    "status": 200,
    "užitečné zatížení": 
}

Při chybě bude odpověď vypadat takto. Užitečné zatížení bude nahrazeno polem zprávy obsahujícím chybu.

{
    "status": 500,
    "message": 
}

Odpověď budete moci ověřit pomocí něco jako chai. Zde použitá transformace je pomocník, který je dodáván s maketou pro snadné serializaci a deserializaci dat.

Uveďte svůj řetězový kód

V horní části testovacího souboru můžete importovat a vytvořit instanci svého řetězového kódu, to se musí provést pouze jednou. Ujistěte se, že jste shim.start () oddělili od svého řetězového kódu. V opačném případě bude proveden před testováním a dojde k chybám. Příklad najdete na naší síťové plotýnce.

Zahrňte vysmívat se

Poté můžete ve svých testech vytvořit nový simulátor. Musíte předat náhodné jméno (v tuto chvíli není důležité) a váš řetězový kód.

Záleží jen na vás, zda chcete pro každý test vytvořit nový vzorový test nebo mít jeden sdílený pro všechny testy. Sdílení jednoho pro všechny testy zachová váš předchozí stav v paměti. Pokud to nechcete, vytvořte pro každý test nový. Mějte na paměti.

Příklad

Test by vypadal takto. Nyní potřebujeme nějakou testovací logiku.

Zkušební inicializace

Metodu Init () lze otestovat pomocí funkce mockStub.mockInit (txId: string, args: string []). Vytvoří novou falešnou transakci a zavolá metodu init na váš řetězový kód. Protože k inicializaci dochází při instanci řetězce, obvykle nechcete, aby nic vrátilo. Zde zkontrolujeme stav odpovědi.

Vyvolání testu

Metodu Invoke () lze otestovat pomocí funkce mockStub.mockInvoke (txId: string, args: string []). To vytvoří novou falešnou transakci a zavolá metodu vyvolání na váš řetězový kód. Klient buď pošle dotaz nebo vyvolání, ale řetězový kód je oba přijme jako vyvolání. Ve vašich testech není žádný rozdíl, výsledek může vyvolat vyvolání i dotazy.

Test queryCar

Vyzkoušejte createCar

TheLedger - Blockchain experti / konzultanti v Belgii a Nizozemsku.

Testování jednotlivých tříd

Nemusíte testovat pouze pomocí mockInvoke a mockInit. Pokud to opravdu chcete, můžete přímo zavolat metody na svůj řetězový kód nebo na mockStub.

Testování přímo pomocí Mychaincode

Poznámka při použití tohoto, v závislosti na tom, co vrátíte ve své funkci, budete moci v testech přijmout vyrovnávací paměť nebo objekt. To je diskutováno v horní části tohoto blogu.

Závěr

Slyším tě, také nenávidím psaní testů. Ale myslím, že tkanina-podložka to opravdu potřebovala. Chtěl bych jej přidat do skutečného obalu s látkou a podložkou, který je podobný simulátoru dodávanému s podložkou Golang. Nebo alespoň přesuňte údržbu do nadace Hyperledger. Za tímto účelem existuje několik implementačních funkcí. A balíček musí být důkladně otestován, takže vás vyzývám, abyste k němu přispěli! #makeTestingGreaAgain

Specializujeme se nejen na Hyperledger Fabric. Provádíme také tokenový prodej, inteligentní audity smluv a další skvělé věci. Spojte se s TheLedgerem.

Co číst dále

→ Hyperledger Fabric & couchdb, fantastické dotazy a kde najít…

→ Nasycený seznam zdrojů Hyperledger Fabric

→ Přineste si svůj vlastní standard na blockchain