2017-09-27 4 views
2

J'utilise Mocha pour tester une application reac/webpack/babel qui est écrite en es6 stage-0, qui inclut dynamic imports. Webpack compile sans erreur, mais mocha jette l'erreur suivante en atteignant une syntaxe d'importation dynamique:Mocha ne reconnaît pas les importations dynamiques

import('path/to/file').then(...) 
^^^^^^ 
SyntaxError: Unexpected token import 

La commande que je suis en cours d'exécution est:

$ mocha --compilers js:babel-register src/**/*.test.js 

Et dans mon .babelrc je dois à suivre :

{ 
    "presets": ["es2015", "react", "stage-0"] 
} 
+0

Ce n'est pas le travail de Moka de «reconnaître les importations dynamiques». Mocha s'exécute dans Node et ** Node ** ne prend pas en charge les importations (dynamiques ou statiques). Babel doit les convertir en quelque chose que Node peut consommer. Je sais par expérience qu'un Babel correctement configuré n'a aucun problème à convertir les importations statiques. Je ne sais pas comment il gère les dynamiques. Je ne vois rien dans la [documentation de Node] (https://nodejs.org/api/modules.html) qui est un simple nœud natif équivalent à une importation dynamique. – Louis

+0

@Louis mais si j'utilise babel comme compilateur (avec un preset de stage-0), ne devrait-il pas le gérer correctement? –

Répondre

3

Comme l'a mentionné @louis, il s'agit d'un problème de nœud. La solution est d'ajouter le plugin dynamic-import-node à babel:

{ 
    "presets": ["es2015", "react", "stage-0"], 
    "plugins": ["dynamic-import-node"] 
} 

Ce qui ajoute le support de la syntaxe import(...) dans le nœud.

+0

Le plugin 'syntax-' est pour si vous voulez analyser 'import()' mais ne le transformez pas. L'utiliser à côté d'un plugin comme 'dynamic-import-node' est un no-op. Vous devriez l'enlever. – loganfsmyth

+0

@loganfsmyth en utilisant n'importe lequel des plugins ci-dessus sans que l'autre nœud provoque le lancement de cette erreur. Une idée pourquoi? Une meilleure solution? –

+1

Vous avez besoin de 'dynamic-import-node' mais pas de' syntax-dynamic-import'. Le plugin 'dynamic-import-node' [inclut' syntax-dynamic-import' à l'intérieur de lui-même.] (Https://github.com/airbnb/babel-plugin-dynamic-import-node/blob/master/src/index .js # L1) – loganfsmyth