„SyntaxError: Unexpected token import“ beim Trüffeltest

Ich erhalte die Fehlermeldung „SyntaxError: Unexpected token import“, wenn ich „Trüffeltest“ durchführe. Ich versuche, eine in einer anderen Datei deklarierte Funktion in die Java-Script-Testdatei zu importieren. Ich suche schon seit einiger Zeit nach diesem Problem und konnte keine Lösung finden. Ist dies ein Problem bei Mokkatests an Trüffeln?

Antworten (4)

Es musste lediglich eine package.json-Datei mit einigen babel-Abhängigkeiten zum Projektverzeichnis hinzugefügt und eine „npm-Installation“ durchgeführt werden. Fügen Sie außerdem eine '.babelrc'-Datei zum Truffle-Projektverzeichnis hinzu. Abschließend müssen Sie der Datei truffle.js einige erforderliche Elemente hinzufügen.

package.json-Datei

{
  "name": "game-token",
  "devDependencies": {
    "babel-preset-es2015": "^6.18.0",
    "babel-preset-stage-2": "^6.24.1",
    "babel-preset-stage-3": "^6.17.0",
    "babel-polyfill": "^6.26.0",
    "babel-register": "^6.23.0"
  }
}

.babelrc-Datei

{
  "presets": ["es2015", "stage-2", "stage-3"]
}

erfordert in truffle.js

require('babel-register');
require('babel-polyfill');
erfordert auch babel-polyfill in Ihren devDependencites: "babel-polyfill": "^6.26.0",

Ich habe die Lösung von i_robot ausprobiert und es hat fast * funktioniert, ich musste hinzufügen:

require('babel-register')({
  ignore: /node_modules\/(?!zeppelin-solidity)/
});
require('babel-polyfill');

oben in meiner truffle.js. Das Ignorieren-Feld ist wichtig!! Zusätzlich zum Hinzufügen von babel-polyfill in meine Paket.json-Abhängigkeiten:

  "dependencies": {
    "babel-polyfill": "^6.26.0",
    "babel-preset-es2015": "^6.18.0",
    "babel-preset-stage-2": "^6.24.1",
    "babel-preset-stage-3": "^6.17.0",
    "babel-register": "^6.23.0",
    "bignumber.js": "^5.0.0",
    "bluebird": "^3.5.1",
    "lodash": "^4.17.4",
    "zeppelin-solidity": "1.6.0"
  }

.babelrc-Datei

{
  "presets": ["es2015", "stage-2", "stage-3"]
}

Wenn Sie kein es6-Javascript verwenden, können Sie das importSchlüsselwort nicht verwenden. Wenn Sie es6 verwenden, haben Sie möglicherweise Mocha nicht richtig eingerichtet, um es zu verstehen oder auf es5 zu transpilieren, bevor Sie Ihre Tests ausführen.

Gibt es Ressourcen, um das Mocha-Test-Framework für Trüffel richtig einzurichten? Das wäre sehr hilfreich.
Sie müssen sich mit der Verwendung von webpack und babel befassen, um Ihre Tests in eine Version von js zu transpilieren, die Mocha versteht. Hier ist eine Anleitung: github.com/trufflesuite/truffle/wiki/… . Und hier ist eine allgemeine Anleitung zur Verwendung von Webpack und Babel mit Mocha: jamesknelson.com/testing-in-es6-with-mocha-and-babel-6 . Ich akzeptiere Upvotes.

Ich fand es einfacher, die requireMethode anzuwenden.

src/utils.js:

exports.a = 3;

test/foo/testfile.js:

// Note the relative path from the current test file.
const utils = require('../../src/utils.js');
console.log(utils.a); // 3