const assert = require('assert');
const ganache = require('ganache-cli');
const Web3 = require('web3');
const provider = ganache.provider();
const web3 = new Web3(provider);
const { interface, bytecode } = require('../compile');
let accounts;
let inbox;
beforeEach(async () => {
// Get a list of all accounts
accounts = await web3.eth.getAccounts();
// Use one of those accounts to deploy the contract
inbox = await new web3.eth.Contract(JSON.parse(interface))
.deploy({ data: bytecode, arguments: ['Hi there!'] })
.send({ from: accounts[0], gas: '1000000' });
inbox.setProvider(provider);
});
describe('inbox', () => {
it('deploys a contract', () => {
assert.ok(inbox.options.address);
});
it('has a default message', async () => {
const message = await inbox.methods.message().call();
assert.equal(message, 'Hi there!');
});
});
Ошибка заключается в require('../compile')
уверенности, поскольку она должна возвращать ноль.
Попробуйте обратиться к приведенному ниже коду для компиляции кода Solidity. Проверьте, работает ли ваш файл compile.js аналогичным образом или нет.
// Compile the source code
const input = fs.readFileSync('Coin.sol');
const output = solc.compile(input.toString(), 1);
const bytecode = output.contracts[':Coin'].bytecode;
const abi = JSON.parse(output.contracts[':Coin'].interface);
Убедитесь, что вы получили const abi = JSON.parse(output.contracts[':Coin'].bytecode);
«C» в «Coin.sol» заглавными буквами в «compile.js», потому что именно так он хранится в Solidity.
Проблема не в предоставленном коде. Что-то не так с вашим "компилируемым" файлом.
const { interface, bytecode } = require('../compile');
это проблема,
require('../compile')
возвращается undefined
или null
.
require('../compile')
оценивается как undefined
или null
. Это все, что я могу сказать из того, что вы написали.Вам нужно убедиться, что вы правильно экспортируете все из своего compile.js
файла в тестовый файл. У меня есть орфографическая ошибка, когда я экспортировал контракт, мой код здесь был вместо module.exports = solc.compile(source, 1).contracts[':Registration'];
регистрации и, следовательно, compile.js`.:registration
:Registration
{interface, bytecode } were not being exported from the
Надеюсь, это поможет. Это была опечатка, ошибка js.
(спасибо) ngambino0192:
Проблема в том, что это, вероятно, версия компилятора solc. Замена зависимости версии на более позднюю может решить вашу проблему.
Попробуйте следующее:
rm -rf node_modules
// удалятьnode_modules
rm -rf package-lock.json
// удалятьpackage-lock.json
pragma solidity ^0.4.25
pragma solidity ^0.4.25
"solc": "^0.4.25"
Проблема не в файле js, а в файле .sol
Убедитесь, что вы используете Solidity и Solc версии 0.4.17.
Убедитесь, что вы не используете какие-либо функции новой версии Solidity в своей старой версии, такие как конструктор.
Это может быть основная синтаксическая ошибка в вашем файле compile.js или .sol.
Я также получил ту же ошибку, но убедитесь, что имя вашего контракта правильно написано и имя, которое вы используете здесь: module.exports = solc.compile(source, 1).contracts[': Lottery ']; и контрактная лотерея { Это должно быть идентично.
Для гуглеров:
Проблема в том, что это, вероятно, версия компилятора solc. Замена зависимости версии на более позднюю может решить вашу проблему.
Попробуйте следующее:
rm -rf node_modules
// удалятьnode_modules
rm -rf package-lock.json
// удалятьpackage-lock.json
pragma solidity ^0.4.25
"solc": "^0.4.25"
npm install
// устанавливаем новые зависимостиЗатем вы можете запустить свои тесты
В моем случае я использовал
pragma solidity ^0.4.17;
и
constructor() public {...}
вместо функции
Lottery() public{...}
Поддерживается использование версии 0.4.25 solc и конструктора(). В противном случае возникает ошибка типа «RangeError: превышен максимальный размер стека вызовов» и «Невозможно деструктурировать интерфейс свойства «require (...)», поскольку он не определен».
Я получил эту ошибку выше при выполнении теста мокко по моему контракту.
Удалите node_module, package.lock.json и обновите версию solc в контракте, а также в package.json и переустановите с помощью команды «npm install».
мирг
beforeEach
быть внутриdescribe
?0xSHA1001
аллергия на аналогию