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!');
});
});
El error recae en el require('../compile')
seguro, ya que debe devolver un valor nulo.
Intente consultar el código a continuación para compilar el código de solidez. Compruebe si su archivo compile.js funciona de manera similar o no.
// 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);
Asegúrese de tener const abi = JSON.parse(output.contracts[':Coin'].bytecode);
la 'C' de 'Coin.sol' en mayúsculas en 'compile.js' porque así es como se almacena en solidez
El problema no radica en el código proporcionado. Hay algo mal con su archivo de "compilación".
const { interface, bytecode } = require('../compile');
es el problema,
require('../compile')
está regresando undefined
o null
.
require('../compile')
se evalúa como undefined
o null
. Eso es todo lo que puedo decir de lo que has publicado.Debe asegurarse de exportar todo correctamente desde su compile.js
archivo a su archivo de prueba. Tengo un error ortográfico cuando estaba exportando el contrato, mi código mordió aquí module.exports = solc.compile(source, 1).contracts[':Registration'];
el registro fue :registration
en lugar de :Registration
y, por lo tanto, el {interface, bytecode } were not being exported from the
archivo compile.js`.
Espero que esto ayude. Fue un error tipográfico, js.
(gracias a) ngambino0192:
El problema es que esto es probablemente la versión del compilador solc. Cambiar la dependencia de la versión a una más reciente puede resolver su problema.
Prueba lo siguiente:
rm -rf node_modules
// eliminarnode_modules
rm -rf package-lock.json
// eliminarpackage-lock.json
pragma solidity ^0.4.25
pragma solidity ^0.4.25
"solc": "^0.4.25"
El problema no está en el archivo js, está en el archivo .sol
Asegúrese de estar usando solidity y solc versión 0.4.17
Asegúrese de no estar utilizando ninguna función de la nueva versión de solidez en su versión anterior como constructor
Puede ser un error de sintaxis básico en su archivo compile.js o archivo .sol
También recibí el mismo error, pero asegúrese de escribir el nombre de su contrato y el nombre que está usando aquí: module.exports = solc.compile(source, 1).contracts[': Lottery ']; y contrato Lotería { Debe ser idéntico.
Para los googleadores:
El problema es que esto es probablemente la versión del compilador solc. Cambiar la dependencia de la versión a una más reciente puede resolver su problema.
Prueba lo siguiente:
rm -rf node_modules
// eliminarnode_modules
rm -rf package-lock.json
// eliminarpackage-lock.json
pragma solidity ^0.4.25
"solc": "^0.4.25"
npm install
// instalar nuevas dependenciasEntonces puedes ejecutar tus pruebas.
En mi caso, estaba usando
pragma solidity ^0.4.17;
y
constructor() public {...}
en lugar de función
Lottery() public{...}
Se admite el uso de la versión 0.4.25 solc y constructor(). De lo contrario, se genera un error como "RangeError: se excedió el tamaño máximo de la pila de llamadas" y "No se puede desestructurar la propiedad 'interfaz' de 'requerir (...)' ya que no está definida".
Recibí estos errores anteriores mientras ejecutaba la prueba mocha en mi contrato.
Elimine node_module, package.lock.json y actualice la versión de solc en contract, así como en package.json y vuelva a instalar usando el comando "npm install"
mirg
beforeEach
estar dentro deldescribe
?0xSHA1001
Una alergia a la analogía