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?
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 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.
Parthasarathy Ramanujam
eth