Ich versuche, einen meiner Verträge zu testen, aber Truffle beschwert sich, dass er nicht definiert ist. Ich kann sehen, dass der Test in den Build-Ordner kompiliert wird, und ich habe ihn genauso importiert wie andere Verträge, ich bin mir nicht sicher, was mir fehlt.
Der Vertrag:
contract OPCToken is AccessControl, StandardToken {
constructor() {
owner = msg.sender;
}
}
Dann habe ich das Bereitstellungsskript
var OPCToken = artifacts.require("OPCToken");
module.exports = function(deployer) {
deployer.deploy(OPCToken);
}
Dann habe ich meinen Test:
var OPCToken = artifacts.require("OPCToken");
contract('OPCToken', function(accounts) {
it("any C level address can open the contract for applications", async () => {
const OPCToken = await OPCToken.deployed(); // it throws here that OPCToken is not defined.
});
});
Ah, ich habe es. Es ist ein Javascript-Fehler.
Das liegt daran, dass ich das OPCToken überschreibe, das ich hier importiere:
const OPCToken = await OPCToken.deployed();
Es funktioniert, wenn ich stattdessen Folgendes mache:
const opcToken = await OPCToken.deployed();
Ich bin immer noch ein wenig verwirrt darüber, warum - wird die rechte Seite nicht zuerst ausgewertet (an diesem Punkt wurde sie nicht überschrieben) - und die Zuweisung auf der linken Seite erfolgt danach. Ist das beim Trüffeltest anders?
Die Lösung besteht darin, einfach umzubenennen, OPCToken
da es mit dem Vertragsnamen kollidiert.
Es gibt einen Unterschied zwischen der linken/rechten Auswertungsreihenfolge und der Variablendeklarationslogistik.
const myVar = 3;
const myVar = myVar * 14;
Der obige Code löst eine Warnung aus:
myVar
verwendet wurde, bevor es deklariert wurde, was fürconst
Variablen unzulässig ist
Überprüfen Sie es auf jsfiddle .
Kollaborativer Lernender
var OPCToken = artifacts.require("OPCToken");
und zu importierenvar OPCToken = artifacts.require("./OPCToken");
Henk
Kollaborativer Lernender
gute Stimmung
OPCToken
) zweimal. Was ist der Sinn daran?