html
10. Testing de Contratos Inteligentes
El testing de contratos inteligentes es una parte fundamental del ciclo de desarrollo. Dado que los contratos inteligentes una vez desplegados en la blockchain son inmutables, es crucial asegurar que el código esté libre de errores y se comporte según lo esperado. Vamos a explorar en detalle cómo implementar tests para contratos inteligentes en Solidity, utilizando herramientas como Hardhat y Mocha.
Configuración del Entorno de Pruebas
Para realizar pruebas en Solidity, necesitamos configurar un entorno de desarrollo. Utilizaremos Hardhat, una herramienta robusta para la compilación, despliegue, depuración y prueba de contratos inteligentes en Ethereum. Asegúrate de tener instalado Node.js y npm antes de comenzar.
Instalación de Hardhat
Primero, instalemos Hardhat. Ejecuta los siguientes comandos en tu terminal:
npm init -y npm install --save-dev hardhat npx hardhat
Selecciona Create a basic sample project en el asistente de configuración de Hardhat.
Escritura de Pruebas en JavaScript
Hardhat utiliza Mocha y Chai para escribir y ejecutar pruebas. Mocha es un framework de pruebas, y Chai es una biblioteca de aserciones que facilita la validación de los resultados de las pruebas.
Plantilla de Contrato Inteligente para Pruebas
A continuación, un ejemplo de un contrato simple de Solidity que implementa un contador:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0 contract Counter { uint256 private count event CountIncremented(uint256 newCount) function increment() public { count = 1 emit CountIncremented(count) } function getCount() public view returns (uint256) { return count } }
Escribiendo Pruebas
Ahora, vamos a escribir pruebas para el contrato Counter. Creamos un archivo llamado test/counter.js:
const { expect } = require(chai) describe(Counter contract, function () { let Counter let counter let owner beforeEach(async function () { Counter = await ethers.getContractFactory(Counter) [owner] = await ethers.getSigners() counter = await Counter.deploy() await counter.deployed() }) it(Should return the initial count as zero, async function () { expect(await counter.getCount()).to.equal(0) }) it(Should increment the count, async function () { await counter.increment() expect(await counter.getCount()).to.equal(1) }) it(Should emit an event when incrementing the count, async function () { await expect(counter.increment()).to.emit(counter, CountIncremented).withArgs(1) }) })
Explicación del Código de Test
-
Configuración del Contrato y Signers: Utilizamos beforeEach para desplegar una nueva instancia del contrato Counter antes de cada prueba. Esto asegura que cada prueba se ejecute en un estado del contrato limpio.
-
Prueba Inicial: La primera prueba valida que el contador inicial es cero.
-
Incremento del Contador: La segunda prueba llama a la función increment y verifica que el valor del contador haya aumentado a uno.
-
Eventos: La tercera prueba verifica que se emite el evento CountIncremented con el valor correcto cuando se llama a la función increment.
Ejecutando las Pruebas
Para ejecutar las pruebas, utilizamos el siguiente comando en la terminal:
npx hardhat test
Si todo está configurado correctamente, deberías ver una salida en la consola indicando que todas las pruebas han pasado correctamente.
Conclusión
La escritura de tests para tus contratos inteligentes es una práctica esencial para garantizar la seguridad y funcionalidad correcta de tus contratos en producción. Utilizando Hardhat, Mocha y Chai, puedes crear un entorno de pruebas robusto que te permita identificar y corregir errores antes de desplegar tus contratos en la blockchain.
Deja una respuesta