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!');
});
});
Der Fehler liegt sicher bei dem require('../compile')
, da es eine Null zurückgeben muss.
Versuchen Sie, sich auf den folgenden Code zu beziehen, um den Solidity-Code zu kompilieren. Überprüfen Sie, ob Ihre Datei compile.js auf ähnliche Weise funktioniert oder nicht.
// 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);
Stellen Sie sicher, dass Sie das 'C' von 'Coin.sol' in Großbuchstaben in 'compile.js' haben const abi = JSON.parse(output.contracts[':Coin'].bytecode);
, denn so wird es in Solidität gespeichert
Das Problem liegt nicht am bereitgestellten Code. Irgendetwas stimmt mit Ihrer "compile"-Datei nicht.
const { interface, bytecode } = require('../compile');
ist das Problem,
require('../compile')
kehrt zurück undefined
oder null
.
require('../compile')
wird zu undefined
oder ausgewertet null
. Das ist alles, was ich aus dem entnehmen kann, was du gepostet hast.Sie müssen sicherstellen, dass Sie alles korrekt aus Ihrer compile.js
Datei in Ihre Testdatei exportieren. Ich habe einen Rechtschreibfehler, als ich den Vertrag exportierte, mein Code-Bit hier module.exports = solc.compile(source, 1).contracts[':Registration'];
war die Registrierung :registration
anstelle von :Registration
und daher die {interface, bytecode } were not being exported from the
compile.js`.
Ich hoffe das hilft. Es war ein Tippfehler, js error.
(Danke an) ngambino0192:
Das Problem dabei ist wahrscheinlich die Versionierung des Solc-Compilers. Wenn Sie die Abhängigkeit der Version auf eine neuere Version umstellen, kann Ihr Problem möglicherweise gelöst werden.
Versuche Folgendes:
rm -rf node_modules
// entfernennode_modules
rm -rf package-lock.json
// entfernenpackage-lock.json
pragma solidity ^0.4.25
pragma solidity ^0.4.25
"solc": "^0.4.25"
Das Problem liegt nicht in der js-Datei, sondern in der .sol- Datei
Stellen Sie sicher, dass Sie die Solidity- und Solc-Version 0.4.17 verwenden
Stellen Sie sicher, dass Sie keine Funktionen der neuen Solidity-Version in Ihrer alten Version wie Konstruktor verwenden
Es kann sich um einen grundlegenden Syntaxfehler in Ihrer compile.js-Datei oder .sol-Datei handeln
Ich habe auch den gleichen Fehler erhalten, aber stellen Sie sicher, dass Ihr Vertragsname und der Name, den Sie hier verwenden, richtig geschrieben sind: module.exports = solc.compile(source, 1).contracts[': Lottery ']; und Vertragslotterie { Diese muss identisch sein.
Für Googler:
Das Problem dabei ist wahrscheinlich die Versionierung des Solc-Compilers. Wenn Sie die Abhängigkeit der Version auf eine neuere Version umstellen, kann Ihr Problem möglicherweise gelöst werden.
Versuche Folgendes:
rm -rf node_modules
// entfernennode_modules
rm -rf package-lock.json
// entfernenpackage-lock.json
pragma solidity ^0.4.25
"solc": "^0.4.25"
npm install
// neue Abhängigkeiten installierenDann können Sie Ihre Tests durchführen
In meinem Fall habe ich verwendet
pragma solidity ^0.4.17;
Und
constructor() public {...}
statt Funktion
Lottery() public{...}
Die Verwendung von Solc-Version 0.4.25 und Konstruktor() wird unterstützt. Andernfalls wird ein Fehler ausgegeben wie „RangeError: Maximale Aufruflistengröße überschritten“ und „Eigenschaft „Schnittstelle“ von „require(...)“ kann nicht destrukturiert werden, da sie nicht definiert ist“.
Ich habe diesen obigen Fehler erhalten, als ich den Mokka-Test für meinen Vertrag ausgeführt habe.
Löschen Sie node_module, package.lock.json und aktualisieren Sie die Solc-Version im Vertrag sowie in der package.json und installieren Sie sie erneut mit dem Befehl „npm install“.
mirg
beforeEach
drin seindescribe
?0xSHA1001
AnAllergyToAnalogy