¿Alguien tiene pruebas de Truffle para trabajar con async/await?
Mi código de muestra para probar
require('babel-polyfill');
var ERCToken = artifacts.require("./ERCToken.sol");
var Proxy = artifacts.require("./Proxy.sol");
contract('ERCToken', function(accounts) {
it("should allow purchase", async function () {
var expected = 10;
var meta = ERCToken.deployed();
var result = await meta.purchase({from:accounts[0],value:80000});
var balance = await meta.balanceOf(accounts[0]);
assert.equal(balance.valueOf(),expected,"should have purchased "+ expected + "tokens");
});
});
TypeError: meta.purchase no es una función
El programa solidity tiene una función llamada compra. ERCToken.deployed() no parece resolverse sin una llamada.
¿Alguien puede decirme dónde me estoy equivocando?
Resultó que el problema estaba en la forma en que había implementado el contrato usando Truffle. Básicamente, el constructor del contrato Proxy tomó la dirección de ERCToken como entrada. Entonces, el método implementado de Truffle se resolvió correctamente solo para el contrato principal (ERCToken) y nunca para Proxy.
Tuve que refactorizar el código del constructor agregando una función separada para establecer la dirección ERCToken y luego implementé los dos contratos por separado. Esto dio como resultado que tanto ERCToken.deployed() como Proxy.deployed() se resolvieran correctamente.
Código async/await completo disponible aquí: https://github.com/zincoshine/solidity-proxy-example
He usado async/await mientras escribía casos de prueba en truffle. Puedes echar un vistazo al código de referencia:
https://gist.github.com/inovizz/28908af740f72f94d54f4e4b811da75d
y consulte este repositorio para obtener más detalles.
Espero que esto ayude.
Parthasarathy Ramanujam
ética