Я пытаюсь протестировать один из своих контрактов, но трюфель жалуется, что он не определен. Я вижу, что тест компилируется в папку сборки, и я импортировал его так же, как и другие контракты, я не уверен, что мне не хватает.
Контракт:
contract OPCToken is AccessControl, StandardToken {
constructor() {
owner = msg.sender;
}
}
Затем у меня есть сценарий развертывания
var OPCToken = artifacts.require("OPCToken");
module.exports = function(deployer) {
deployer.deploy(OPCToken);
}
Тогда у меня есть тест:
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.
});
});
А, понял. Это ошибка Javascript.
Это потому, что я перезаписываю OPCToken, который я импортирую, здесь:
const OPCToken = await OPCToken.deployed();
Это работает, если я сделаю это вместо этого:
const opcToken = await OPCToken.deployed();
Я все еще немного смущен тем, почему - разве правая сторона не оценивает сначала (в этот момент она не была перезаписана) - а левое присваивание происходит после. Отличается ли это в тестовой среде с трюфелями?
Решение состоит в том, чтобы просто переименовать, OPCToken
поскольку оно конфликтует с именем контракта.
Существует разница между левым/правым порядком оценки и логистикой объявления переменных.
const myVar = 3;
const myVar = myVar * 14;
Приведенный выше код вызовет предупреждение:
myVar
использовался до того, как был объявлен, что недопустимо дляconst
переменных
Проверьте это на jsfiddle .
СовместныйУченик
var OPCToken = artifacts.require("OPCToken");
иvar OPCToken = artifacts.require("./OPCToken");
Хенк
СовместныйУченик
хорошая вибрация
OPCToken
). Какой в этом смысл?