prueba unitaria con trufa, solidez o moka?

La trufa permite lo uno o lo otro. Ahora me pregunto cuál usaré para probar mi código. No soy un gran fanático de la moca. Cuando veo un código como

contract('MetaCoin', function(accounts) {   it("should put 10000 MetaCoin in the first account", function() {
    return MetaCoin.deployed().then(function(instance) {
      return instance.getBalance.call(accounts[0]);
    }).then(function(balance) {
      assert.equal(balance.valueOf(), 10000, "10000 wasn't in the first account");
    });

Creo que algo salió realmente mal en términos de legibilidad. Por otro lado, la idea de redactar un contrato para probar otro contrato me incomoda bastante. ¿Cuáles son las advertencias de las pruebas unitarias con estos dos enfoques diferentes?

Mocha no tiene que ser tan ilegible, si usa la sintaxis asíncrona, se deshace de todos los métodos anidados de then() y aplana todo.
¿Qué quieres decir con "solidez o moka"? No son realmente comparables. ¿Qué sería una prueba de unidad de solidez?

Respuestas (2)

He escrito más de mil pruebas para diferentes contratos inteligentes y puedo decir que casi siempre querrás usar javascript/mocha con trufa. Hay muy pocos casos en los que me he encontrado en los que querrás usar la solidez en su lugar. Es mucho más fácil configurar sus contratos en el estado que desea para ejecutar las pruebas.

Además... realmente no necesitas encadenar llamadas a funciones como en el ejemplo dado. Puede usar async/await, lo que hará que las cosas sean MUCHO más limpias y legibles. He creado un proyecto de trufa repetitivo que utilizo para cualquiera de mis nuevos proyectos. Lo mantengo actualizado con ejemplos, etc. Recomiendo encarecidamente comprobar cómo están las pruebas allí...

repositorio:

https://github.com/TovarishFin/smart-contract-boilerplate

enlace directo a un archivo de prueba usando async/await:

https://github.com/TovarishFin/smart-contract-boilerplate/blob/master/test/ExampleCoin.js

Reemplazar: assert.equal(balance.valueOf(), 10000, "10000 no estaba en la primera cuenta");

Con:

afirmar.igual(equilibrio.valorDe() === 10000, 1); // En caso de verdadero, por falso reemplaza 1 con -1