torre significa resumen quien que paso nos mito mensaje explicacion construyo con actual node.js npm syntax-error mocha babeljs

node.js - significa - torre de babel actual



ImportaciĆ³n de tokens inesperados de Babel al ejecutar pruebas de mocha (17)

Para Babel <6

La forma más fácil de resolver este problema es:

  1. npm install babel-preset-es2015 --save-dev
  2. Agregue .babelrc a la raíz del proyecto con contenido:

    { "presets": [ "es2015" ] }

Asegúrese de estar ejecutando mocha con el parámetro "--compilers js: babel-core / register".

Para Babel6 / 7 +

  1. npm install @babel/preset-env --save-dev
  2. Agregue .babelrc a la raíz del proyecto con contenido:

    { "presets": [ "@babel/preset-env" ] }

Asegúrese de ejecutar mocha con el --compilers js:babel-register (Babel 6) o --compilers js:@babel/register (Babel 7)

Las soluciones ofrecidas en otras preguntas relacionadas, como incluir los ajustes preestablecidos adecuados (es2015) en .babelrc, ya están implementadas en mi proyecto.

Tengo dos proyectos (llamémoslos A y B) que usan la sintaxis del módulo ES6. En el Proyecto A, estoy importando el Proyecto B, que se instala a través de npm y vive en la carpeta node_modules. Cuando ejecuto mi conjunto de pruebas para el Proyecto A, obtengo el error:

SyntaxError: importación de token inesperada

Precedido por esta supuesta línea de código errónea del Proyecto B:

(función (exporta, requiere, módulo, __nombre de archivo, __dirname) {importar createBrowserHistory desde ''history / lib / createBrowserHistory'';

La vida parece ser algo relacionado con npm o posiblemente con Babel, ya que mi archivo fuente solo contiene "import createBrowserHistory de ''history / lib / createBrowserHistory''; La unidad de pruebas en el conjunto de pruebas del Proyecto B funciona bien, y si elimino el Proyecto B como una dependencia de Proyecto A, mi suite de prueba entonces (todavía usando importaciones es6 para módulos internos del proyecto) funciona bien.

Seguimiento completo de la pila:

SyntaxError: Unexpected token import at exports.runInThisContext (vm.js:53:16) at Module._compile (module.js:374:25) at Module._extensions..js (module.js:405:10) at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:138:7) at Module.load (module.js:344:32) at Function.Module._load (module.js:301:12) at Module.require (module.js:354:17) at require (internal/module.js:12:17) at Object.<anonymous> (actionCreators.js:4:17) at Module._compile (module.js:398:26) at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5) at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7) at Module.load (module.js:344:32) at Function.Module._load (module.js:301:12) at Module.require (module.js:354:17) at require (internal/module.js:12:17) at Object.<anonymous> (/ProjectA/src/components/core/wrapper/wrapper.js:28:23) at Module._compile (module.js:398:26) at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5) at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7) at Module.load (module.js:344:32) at Function.Module._load (module.js:301:12) at Module.require (module.js:354:17) at require (internal/module.js:12:17) at Object.<anonymous> (/ProjectA/src/components/core/wrapper/wrapperSpec.js:15:16) at Module._compile (module.js:398:26) at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5) at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7) at Module.load (module.js:344:32) at Function.Module._load (module.js:301:12) at Module.require (module.js:354:17) at require (internal/module.js:12:17) at /ProjectA/node_modules/mocha/lib/mocha.js:219:27 at Array.forEach (native) at Mocha.loadFiles (/ProjectA/node_modules/mocha/lib/mocha.js:216:14) at Mocha.run (/ProjectA/node_modules/mocha/lib/mocha.js:468:10) at Object.<anonymous> (/ProjectA/node_modules/mocha/bin/_mocha:403:18) at Module._compile (module.js:398:26) at Object.Module._extensions..js (module.js:405:10) at Module.load (module.js:344:32) at Function.Module._load (module.js:301:12) at Function.Module.runMain (module.js:430:10) at startup (node.js:141:18) at node.js:980:3

Aquí está mi comando de prueba de package.json:

"test": "mocha --compilers js:babel-core/register ''+(test|src)/**/*Spec.js''"

Esta publicación de StackOverflow es similar, pero no ofrece una solución para mi uso de la línea de comando: importar un módulo desde node_modules con babel pero falló


Bueno, seguro que tendrá ese problema, está utilizando ES6 que mocha no sabe

Entonces estás usando babel pero no lo usas en tu prueba ...

Pocas soluciones

A. si está ejecutando con NPM use

"test": "mocha --compilers js:babel-core/register test*.js"

B. estoy usando

"test": "./node_modules/.bin/mocha --compilers js:babel-core/register **/*spec.jsx"

C. De cli:

mocha --compiladores js: babel-core / register test * .js

Puede leer más en http://www.pauleveritt.org/articles/pylyglot/es6_imports/


Encontré que la forma más fácil de hacerlo con babel 6.XX era usar nyc y luego agregar un archivo helper en pckage.json

Así que aquí está lo que usé

package.json

{ .... "scripts": { "test": "nyc mocha --reporter tap ''test/**/*.spec.js''" }, "devDependencies": { "babel-cli": "^6.24.0", "babel-core": "^6.24.0", "babel-loader": "^6.4.0", "babel-preset-env": "^1.2.2", "babel-preset-es2015": "^6.24.0", "babel-preset-react": "^6.23.0", "babel-preset-react-hmre": "^1.1.1", "babel-preset-stage-2": "^6.22.0", "babel-register": "^6.24.0", "babel-runtime": "^6.23.0", "chai": "^3.5.0", "mocha": "^3.2.0", "nyc": "^10.1.2", "webpack": "^2.3.3", "webpack-config": "^7.0.0", "webpack-dashboard": "^0.3.0", "webpack-dev-server": "^2.4.2" }, "nyc": { "all": true, "include": [ "src/**/*.js" ], "cache": true, "require": [ "./test/helper/registerBabel.js" ] } }

babelrc

{ "presets": [ "es2015", //remove the {modules: false} it doesn''t work with this "stage-2" ] }

registerBabel.js

/* eslint-disable import/no-commonjs, import/unambiguous */ require(''babel-register'')();

Ahora podrá usar es6 en sus pruebas o donde lo necesite. Los míos están fallando;)

Luego, npm run test que activará nyc mocha --reporter tap ''test/**/*.spec.js''



Esto es lo que funcionó para mí. Recibí una advertencia al usar la bandera --compilers .

DeprecationWarning: "--compilers" se eliminará en una versión futura de Mocha; ver https://git.io/vdcSr para más información

Por lo tanto, lo reemplacé con la bandera --require

"test": "mocha --require babel-core/register --recursive"

Aquí está mi .babelrc :

{ "presets": ["env"] }

Mis dependencias de desarrollo package.json

"devDependencies": { "babel-cli": "^6.26.0", "babel-preset-env": "^1.7.0", "mocha": "^5.2.0", }


Estoy agregando otra respuesta de configuración ES6 + mocha + babel aquí, actual a partir de junio ''19 (consulte las fechas en respuesta / comentario). mocha ha desaprobado el indicador --compiler , y la versión que estoy usando no está disponible incluso con el indicador --no-deprecation , cf this

Tenga en cuenta que no incluiré todos los bits relevantes de las páginas enlazadas, porque ninguno de ellos me llevó a una compilación de prueba limpia basada en las últimas versiones de mocha y babel; Esta respuesta debe incluir los pasos que me llevaron a una prueba de compilación exitosa.

Siguiendo las instrucciones aquí, y en esta respuesta , y here , intenté instalar lo que parecía ser la última npm install mínima de babel usando npm install :

$ npm install --save-dev mocha $ npm install --save-dev @babel/preset-env

Y ajusté la invocación de mocha en package.json, así:

"scripts": { "test": "mocha --compilers js:@babel/register" }

Esto condujo a errores:

× ERROR: --compilers is DEPRECATED and no longer supported.

Como se --no-deprecation anteriormente, --no-deprecation no ayudó, consulte la página vinculada anteriormente. Entonces, siguiendo las instrucciones de this , ajusté package.json:

"scripts": { "test": "mocha --require js:@babel/register" }

Y comenzó a ver errores sobre la ubicación de los módulos de babel, como:

× ERROR: Cannot find module ''@babel/register''

En este punto comencé a instalar paquetes de babel hasta que pudiera progresar. Creo que la instalación completa es algo así como:

$ npm install --save-dev @babel/preset-env @babel/register @babel/core

El último cambio requerido fue actualizar la invocación de mocha en package.json, eliminando el prefijo js: así:

"scripts": { "test": "mocha --require @babel/register" }

No puedo responder por qué esto era necesario: si alguien puede responder esto, deje un comentario y actualizaré mi respuesta con mejor información.

Lo último que hice fue crear un .babelrc en el directorio del proyecto, con el contenido:

{ "presets" : ["@babel/preset-env"] }

No recuerdo qué provocó esto, pero creo que fue porque mocha continuó quejándose de no reconocer la palabra clave de import en mi test.js. Como se indicó anteriormente, si alguien puede responder esto, deje un comentario y actualizaré mi respuesta con mejor información.


Instalé mocha y encontré exactamente el mismo error cuando uso import en mi código. Al hacer las siguientes acciones, se solucionó el problema.

npm install babel-core --save-dev npm install babel-preset-es2015 --save-dev npm install babel-preset-stage-0 --save-dev

Y luego agregue un archivo .babelrc :

{ "presets": [ "es2015" ] }

Y luego ejecuta mocha de esta manera:

mocha --compilers js:babel-core/register


Me encontré con el mismo problema. Después de haber probado cualquier otra solución en y más allá, agregar esta configuración simple en package.json lo hizo por mí:

"babel": { "presets": [ "es2015" ] }

Todas mis importaciones de ES6 funcionaron después de eso. Por cierto, tenía esta misma configuración dentro de webpack.config.js, pero aparentemente esta era la única forma de hacerlo funcionar también para las pruebas de mocha.

Espero que esto ayude a alguien.


Para cualquiera que use Babel 7 y Mocha 4, algunos de los nombres de los paquetes han cambiado un poco y la respuesta aceptada está un poco desactualizada. Lo que tuve que hacer fue:

npm install @babel/register --saveDev

y agregando --require @babel/register a la línea de prueba en package.json

"test": "./node_modules/mocha/bin/mocha --require @babel/polyfill --require @babel/register ''./test/**/*.spec.js''"

El @babel/polyfill corrige algunas cosas como la funcionalidad async / wait si está usándolas.

Espero que ayude a alguien :)


Parece que la única solución es incluir explícitamente:

require(''babel-core/register'')({ ignore: /node_modules/(?!ProjectB)/ });

en un archivo auxiliar de prueba, y pasarlo a mocha en mi comando de prueba:

mocha --require ./test/testHelper.js...

La solución definitiva:

Agregue registerBabel.js : un archivo separado cuyo trabajo es requerir babel-core / register ...

require(''babel-core/register'')({ ignore: /node_modules/(?!ProjectB)/ });

Agregue entry.js si su aplicación también se basa en babel-node. Esto actúa como un contenedor para su aplicación que contiene es6.

require(''./registerBabel''); require(''./server''); // this file has some es6 imports

Luego ejecutaría su aplicación con node entry

Para las pruebas de mocha, testHelper.js también debe requerir registerBabel.js para inicializar el soporte de babel en tiempo de ejecución.

require(''./registerBabel'');

Y ejecute sus pruebas de mocha --require ./testHelper.js ''+(test)/**/*Spec.js'' con mocha --require ./testHelper.js ''+(test)/**/*Spec.js''

Esto probará recursivamente cualquier archivo que termine en "Spec.js" dentro de "./test". Sustituya el patrón por uno que coincida con las especificaciones de su proyecto.


Resolví este problema esta mañana con las siguientes instrucciones

Instalar módulos NPM

npm install --save-dev @babel/polyfill npm install --save-dev @babel/register

package.json :

"scripts": { "test": "mocha --require @babel/register --require @babel/polyfill src/DesktopApplication/Tests", }

.babelrc

{ "presets": ["@babel/env"] }


Resolví este problema esta mañana con las siguientes instrucciones de las instrucciones oficiales de Uso de Babel para Mocha 4:

Instalar módulos NPM

npm install --save-dev babel-polyfill npm install --save-dev babel-preset-env npm install --save-dev babel-register

o un solo comando:

npm i -d babel-polyfill babel-preset-env babel-register

package.json :

"scripts": { "test": "mocha --require babel-polyfill --require babel-register" }

.babelrc

{ "presets": ["env"] }


Tenía {"modules": false} en mi archivo .babelrc, así:

"presets": [ ["es2015", {"modules": false}], "stage-2", "react" ]

que estaba tirando

Importación de token inesperada

Una vez que lo eliminé, el mocha se ejecutó con éxito.


Tuve el mismo problema y lo solucioné leyendo la documentación de Babel para integrar Babel con Mocha:

{ "scripts": { "test": "mocha --compilers js:babel-register" } }


Yo tuve el mismo problema. Cuando ejecuté pruebas, me di cuenta de que realmente quería tropezar con módulos dependientes. Es bueno para pruebas unitarias y evita que Babel transforme submódulos. Entonces utilicé proxyquire , a saber:

const proxyquire = require(''proxyquire'').noCallThru() const myTestedModule = proxyquire(''../myTestedModule'', { ''dependentModule1'': { //stubbed module1 }, ''dependentModule2'': { //stubbed module2 } })


para una configuración más a prueba de futuro

npm install babel-preset-latest --save-dev

y en .babelrc

{ "presets": [ "latest" ] }

Opuesto a...

npm install babel-preset-es2015 --save-dev

y

{ "presets": [ "es2015" ] }


--compilers está en desuso.

Mi solución simple:

npm install --save-dev babel-core

Y en el package.json agregue su script de prueba de esta manera:

"scripts": { "test": "mocha --require babel-core/register ./test/**/*.js -r ./test-setup.js" },