Comment écrire des tests unitaires pour votre contrat intelligent?

0
625

Une fois le contrat intelligent déployé sur la blockchain, il ne peut plus être modifié. C’est pourquoi chaque développeur doit le tester le plus possible pour vérifier le comportement de chaque fonction et confirmer qu’elle s’exécute comme prévu. Les tests peuvent être écrits soit en nodejs soit en solidity. Mais dans cet article, nous n’utiliserons que nodejs. De plus, on va utiliser truffle comme développement d’environnement, si c’est la première fois que vous entendez parler de truffle, nous avons déjà créé un article à ce sujet, cliquer ici pour le voir.

Table Des Matières

Ecrire des tests en javascript ?

Il existe une myriade de frameworks de test javascript disponibles, notamment Jest, Jasmine, QUnit, Karma et Cypress, entre autres. L’un des frameworks de test les plus populaires pour JavaScript est Mocha.

Dans cet article , nous allons montrer comment tester une application Node.js avec Mocha, car elle est utilisée dans truffle.

Mocha

Mocha est un framework de test JavaScript largement utilisé fonctionnant sur NodeJS et les navigateurs. Il prend en charge les tests asynchrones exécutant les tests en série. C’est un framework hautement personnalisable qui prend en charge différentes assertions et bibliothèques.

Chai

Chai est une bibliothèque d’assertions qui est principalement utilisée avec Mocha. Elle possède plusieurs interfaces parmi lesquelles un développeur peut choisir et ressemble à l’écriture de tests dans des phrases en anglais.

Comment les utiliser?

nous aurons un bref exemple pour montrer comment mocha et chaijs fonctionnent ensemble, mais nous irons plus loin dans la deuxième partie lorsque nous les combinons avec  truffle.

RNFTEkQrZcdfbUgU klJyTQEkX6NDJ2 eL7Cs7rslHeceM vhmTbgs2xgAm6cUvEOtWzy8nUgKsRsP7t7kum0YM0dWn bqRkDlbJ OqKGlQiHZQBO4qAU2iF6USFDRPuoNPXJyOn 1b8PJfCMUfDPif43pnVM1jjCYvoJwdl9sFHCOYaBVDsD3tX3Q

L’image ci-dessus est juste une fonction d’addition que nous allons tester en utilisant mocha et chaijs.

rml6OiMRxVY9RFBPXiKRob0r9Lu9vZ7kC5pMoUbjGdBHBUV5h2rTS84PSMw7cauubxi2qi0euxA886roCnwaHC6 D s5hzP5Hej4 pSsQhGIZu3NIHMFeZrgRq2kVMyje7ZIuyHzXPnhRLWWd7216f0a7waEYFT9Ph4wZl9GD1Vb gsRN2O 7 2nQ

passons à la deuxième image qui est plus importante, nous avons :

  • le mot clé describe() qui est une suite de scripts de test qui appelle une fonction globale avec deux paramètres : une chaîne (description) et une fonction.
  • le mot-clé it() qui est le plus petit cas de test unitaire écrit pour être exécuté. it() appelle une fonction globale avec deux paramètres: une chaîne(string) et une fonction.

 N.B:

  •  Vous pouvez écrire plusieurs instructions it() dans une méthode describe().
  • si vous remarquez bien, vous trouverez le mot-clé expect() dans la fonction it().it est pour les assertions

Ecrire des tests avec truffle?

Truffle utilise le framework de test Mocha et Chai pour les assertions afin de fournir aux développeurs un cadre solide à partir duquel écrire vos tests JavaScript. Plongeons-nous et voyons comment Truffle s’appuie sur Mocha pour faciliter le test de vos contrats.

Utilisation de contract() au lieu de describe()

Tout d’abord, vos tests doivent exister dans le dossier ./test , ils doivent se terminer par une extension “.js” et doivent contenir du code que Mocha reconnaîtra comme un test automatisé.

Jusqu’à présent, il n’y a rien de nouveau par rapport à ce que nous avons vu dans la première section. En fait, ce qui rend les tests Truffle différents de ceux de Mocha, c’est la fonction contract().En effet, on va utiliser cette fonction au lieu de describe().

La fonction Contract() peut faire tout ce que describe() fait. De plus, elle offre ces fonctionnalités :

  • Avant l’exécution de chaque fonction contract(), vos contrats sont redéployés sur le client Ethereum en cours d’exécution afin que les tests qu’il contient s’exécutent avec un état de contrat propre.
  • La fonction contract() fournit une liste de comptes mis à disposition par votre client Ethereum que vous pouvez utiliser pour écrire des tests.

Utilisation du “contract abstractions”  dans vos tests

Truffle n’a aucun moyen de détecter les contrats avec lesquels vous devrez interagir dans vos tests, vous devrez demander ces contrats explicitement. Pour ce faire, utilisez artifacts.require(), il vous suffit de transmettre le nom du contrat.

Utilisation du web3

Une instance web3 est disponible dans chaque fichier de test, configurée pour le bon provider.

Exemple des tests d’un contrat intelligent ERC20:

Dans cette section, nous allons tester un contrat erc20 que nous avons créé dans le dernier article, cliquez ici pour le voir.

La première chose que nous devons faire est d’appeler notre contrat erc20.

Dans l’image ci-dessous, vous remarquez que nous utilisons le hook beforeEach(), il s’exécute avant chaque test de ce bloc.

beforeEach(name, fn):

name: String optionnel pour la description

fn: Un fonction qui s’exécute automatiquement avant chaque test

Dans notre cas, nous utilisons beforeEach() pour redéployer notre contrat avant chaque test

uFHqqGbHyhBB SQJYt9CU6ZWLbUtLQ1fvoZFIKjX0DoxDMEPyTgnHX34NjvunCLKXqEw ajKAC aLDdYBA7iChY3T wVH5oJCADPklYXkU8Hn2R8M4ltZxkf xwIhEVSTX1Qzrxlm4eP7nZCnBDSC4aRwwWKa 4iYHqJzzzWhn9oBRvLunPqvAbXbQ

Dans ce test, nous vérifions si le solde du propriétaire du token est de 10 000, car nous avons passé ce nombre  aux arguments du  constructeur lors du déploiement dans beforeEach()An6ri6eR0A7RmciMoW6G7nYvasVCU6M1YbxaGXsdk8xqvYWAuFHob1ndXrzlxv9K7bphbBaWv

Nous définissons deux constantes afin de les utiliser dans les tests:

IL kXYBNA2kQU0o3j3Tm74PLZmfjEvNf xND qLKeX5Mh3HoZJ9tTLsRACp0mDfLmq6zvg0SXWqwB9l86gqtIXgowgfHjaKmMCDNTOMGPzjiWpLZI5S3QbRtBMYXxrSVGZJRso SD7JY2gNcNI GMU8 N5yU em fuqDUA001hcVFpMyc790EaoGNg

Dans ce test, nous vérifions si le tokenName et le tokenSymbol correspondent à ce que nous avons passé au constructeur dans le dernier article.

TWUflxZr27vR2erZSCKLV1xL6H5l5MDsWLl9nzSO ctL4CnOkMzRn4ScgtVqEVoS59FaqJuyNt0ExTurCzSHCK ptSPA IsWtjUPYCD5dRrRNQVJ2NipR8

Dans l’image ci-dessous, nous testons le transfert de accounts[0] qui est le compte du propriétaire  vers accounts[1]

0ciKzJwQDww86 iwNmDWrozW 998b iBFNjh23C76WLEPaX

Dans ce test,nous testons la fonctionnalité du minting.En effet,si la balance du compte accounts[1] est égal à 100000 alors le minting est effectuée avec succès.

WqsmNo6jjrppUE6DJvshrO8gDV DKDoPYNdZcGGv4s

Après avoir écrit les tests, il ne vous reste plus qu’à écrire la commande ci-dessous dans votre terminal :

truffle test    

Ensuite, vous obtiendrez les résultats de vos tests dans le terminal comme dans l’image ci-dessous :

nTK8bDfsKbZi8lR0Ffye2kBV8EfzkbXGx9rE1 FlMtFoOn3nMa6ZLp9UAKhZTIrsL igzahT5lCCMSLUkRL3ygF rfcvLhuW71BqQh d1qxwkvCL

Félicitations!! vous venez d’écrire vos premier tests pour votre contrat intelligent en utilisant truffle.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here

This site uses Akismet to reduce spam. Learn how your comment data is processed.