Prueba de trufa con async/await

¿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?

En realidad, ERCToken.deployed() siempre devuelve solo una Promesa, mientras que ERCToken.at("dirección") devuelve un objeto válido.
Por favor, publique la respuesta si lo resolvió. Está bien responder a su propia pregunta.

Respuestas (2)

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

Tengo exactamente este mismo problema pero no puedo resolverlo. ¿Puedes dar más detalles?
Vuelva a verificar el script de implementación que usó para implementar el contrato. ¿Está su código disponible en algún lugar para que lo busque?
Parecía haber resuelto el problema cambiando el nombre del contrato. No estoy seguro de por qué este es el caso.

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.

Por favor, nunca "vincule" a un código externo, el enlace aquí ya no funciona. Si tiene tiempo, copie y pegue algunos fragmentos de código relevantes. me ayudó, así que gracias de antemano ;-))
Sí, eliminamos este caso de prueba porque no era necesario. Actualizaré esto con un enlace esencial público, que no caducará. Lo siento por los inconvenientes ocasionados.