Elegir entre Javascript y Solidity para probar contratos inteligentes

Truffle ofrece dos formas de probar contratos inteligentes: ya sea utilizando archivos de prueba escritos como contratos de Solidity o Javascript/Mocha.

https://truffleframework.com/docs/truffle/testing/writing-tests-in-solidity

https://truffleframework.com/docs/truffle/testing/write-tests-in-javascript

¿Hay recomendaciones sobre cuándo elegir entre los dos? ¿Te quedas con uno o usas ambos pero para diferentes propósitos?

Respuestas (4)

Uso exclusivamente javascript (por ahora), porque:

  • Me siento más cómodo con el entorno y las herramientas de desarrollo de nodejs que con la solidez.
  • Me gustan los mensajes de depuración que puedo poner en js (probablemente podría activar algunos eventos que actuarían como cosas de registro)
  • No he escrito contratos inteligentes complejos que necesitan interactuar entre sí, por lo que debería probar sus interacciones.
  • Puedo tomar fragmentos de nodejs de las pruebas y usarlos en la interfaz de usuario web casi sin ninguna modificación.

No digo que mi enfoque sea el mejor y que todo el mundo debería usarlo, y las pruebas en solidez son inútiles. Prefiero decir que soy perezoso , no tuve suficiente tiempo para aprender y sentirme cómodo usando solidity para probar y las pruebas de nodejs son lo suficientemente buenas para mí por ahora.

Si tiene tiempo, le recomiendo que se sienta cómodo usando ambos métodos .

Hmm, según lo que acabas de decir, supongo que tendríamos que usar Solidity al probar las interacciones entre contratos.
Creo que ese es el mejor caso de uso para ello. Por supuesto, también se puede usar para probar contratos individuales, pero web3jshasta ahora hizo un muy buen trabajo para mí.

Estoy de acuerdo con Tudor, también uso javascript. Me gustaría agregar:

  • las pruebas en trufa de solidez realizan algunas transacciones adicionales que son bastante difíciles de rastrear
  • pruebas en javascript muy cómodas para depurar

Probar sus contratos inteligentes con JavaScript

Y el resultado:

Contrato: FundRaise ✓ tiene un dueño (38ms) ✓ es capaz de aceptar fondos (234ms)
2 pasando (473ms)

Hermosamente. Este es un proceso que se lleva a cabo sistemáticamente para cubrir los contratos inteligentes con una prueba escrita en JavaScript. Simplemente siga haciéndolo hasta que se cumplan todas las condiciones de un contrato inteligente.

Aquí hay un excelente artículo de Medium que cubre todo lo relacionado con las pruebas en Ethereum.

Pruebas de solidez

Escribir pruebas en Solidity nos da la capacidad de ejecutar pruebas de capas de Blockchain. Permiten que las pruebas llamen a contratos y funciones como si estuvieran en Blockchain. Para probar el comportamiento interno de los contratos inteligentes podemos:

  • Escriba pruebas unitarias para verificar los valores devueltos de la función y los valores de las variables de estado.
  • Escriba pruebas de integración que prueben las interacciones entre contratos. Estos aseguran que los mecanismos como la herencia y la inyección de dependencia funcionen como se espera.

Pruebas de JavaScript

También debemos asegurarnos de que los contratos inteligentes muestren el comportamiento externo correcto. Para probar contratos inteligentes desde fuera de Blockchain, usamos Web3js, tal como lo haría nuestra DApp. Necesitamos tener confianza en que nuestra interfaz DApp funcionará correctamente al llamar a los contratos inteligentes. Estos caen bajo las pruebas de integración.

Fuente: https://betterprogramming.pub/how-to-test-ethereum-smart-contracts-35abc8fa199d