Trüffeltest mit async/await

Hat jemand Truffle-Tests, um mit async/await zu arbeiten?

Mein Beispielcode zum Testen

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 ist keine Funktion

Das Soliditätsprogramm hat eine Funktion namens Kauf. ERCToken.deployed() scheint nicht ohne einen then-Aufruf aufgelöst zu werden.

Kann mir bitte jemand sagen, wo ich falsch liege?

Tatsächlich gibt ERCToken.deployed() immer nur ein Promise zurück, während ERCToken.at("address") ein gültiges Objekt zurückgibt.
Bitte poste die Antwort, wenn du es gelöst hast. Es ist in Ordnung, Ihre eigene Frage zu beantworten.

Antworten (2)

Es stellte sich heraus, dass das Problem in der Art und Weise lag, wie ich den Vertrag mit Truffle bereitgestellt hatte. Grundsätzlich nahm der Konstruktor des Proxy-Vertrags die Adresse von ERCToken als Eingabe. Die bereitgestellte Methode von Truffle wurde also nur für den Hauptvertrag (ERCToken) und niemals für Proxy korrekt aufgelöst.

Ich musste den Konstruktorcode umgestalten, indem ich eine separate Funktion zum Festlegen der ERCToken-Adresse hinzufügte und dann die beiden Verträge separat bereitstellte. Dies führte dazu, dass sowohl ERCToken.deployed() als auch Proxy.deployed() korrekt aufgelöst wurden.

Vollständiger async/await-Code ist hier verfügbar: https://github.com/zincoshine/solidity-proxy-example

Ich habe genau das gleiche Problem, kann es aber nicht lösen. Können Sie näher darauf eingehen?
Überprüfen Sie das Bereitstellungsskript, das Sie zum Bereitstellen des Vertrags verwendet haben. Ist Ihr Code irgendwo verfügbar, damit ich nachsehen kann?
Ich schien das Problem gelöst zu haben, indem ich den Vertrag umbenannte. Ich bin mir nicht sicher, warum dies der Fall ist.

Ich habe async/await beim Schreiben von Testfällen in Trüffel verwendet. Sie können sich den Referenzcode ansehen -

https://gist.github.com/inovizz/28908af740f72f94d54f4e4b811da75d

und überprüfen Sie dieses Repo für weitere Details.

Hoffe das hilft.

Bitte niemals "Hardlink" zu externem Code, der Link hier funktioniert nicht mehr - wenn Sie Zeit haben, einige relevante Code-Snippets zu kopieren/einzufügen - würde ich dies gerne positiv bewerten (ich habe Ihr Repo bereits durchsucht und es hat mir geholfen - also danke im voraus ;-) )
Ja, wir haben diesen Testfall entfernt, da er nicht benötigt wurde. Ich werde dies mit einem öffentlichen Gist-Link aktualisieren, der nicht abläuft. Entschuldigung für die Unannehmlichkeiten.