Estoy intentando probar uno de mis contratos, pero truffle se queja de que no está definido. Puedo ver que la prueba se compila en la carpeta de compilación y la he importado de la misma manera que otros contratos, no estoy seguro de lo que me estoy perdiendo.
El contrato:
contract OPCToken is AccessControl, StandardToken {
constructor() {
owner = msg.sender;
}
}
Luego tengo el script de implementación.
var OPCToken = artifacts.require("OPCToken");
module.exports = function(deployer) {
deployer.deploy(OPCToken);
}
Entonces tengo mi prueba:
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.
});
});
Lo tengo. Es un error de Javascript.
Es porque estoy sobrescribiendo el OPCToken que estoy importando, aquí:
const OPCToken = await OPCToken.deployed();
Funciona si hago esto en su lugar:
const opcToken = await OPCToken.deployed();
Todavía estoy un poco confundido en cuanto a por qué, sin embargo, el lado derecho no se evalúa primero (momento en el que no se ha sobrescrito) y la asignación del lado izquierdo ocurre después. ¿Es esto diferente en el entorno de prueba de trufa?
La solución es simplemente cambiar el nombre, OPCToken
ya que choca con el nombre del contrato.
Hay una diferencia entre el orden de evaluación del lado izquierdo/derecho y la logística de declaración variable.
const myVar = 3;
const myVar = myVar * 14;
El código anterior activará una advertencia:
myVar
se usó antes de que se declarara, lo cual es ilegal paraconst
las variables
Compruébalo en jsfiddle .
Aprendizaje colaborativo
var OPCToken = artifacts.require("OPCToken");
yvar OPCToken = artifacts.require("./OPCToken");
henk
Aprendizaje colaborativo
buena vibración
OPCToken
) dos veces. ¿Cuál es el punto en eso?