node.js - मोचा परीक्षण चलाने पर बेबल अप्रत्याशित टोकन आयात




npm syntax-error (12)

बाबेल के लिए <6

इस समस्या को हल करने का सबसे आसान तरीका है:

  1. npm install babel-preset-es2015 --save-dev
  2. सामग्री के साथ प्रोजेक्ट के मूल में .babelrc जोड़ें:

    {
     "presets": [ "es2015" ]
    }

सुनिश्चित करें कि आप "- माइक्रोमैक्स जेएस: बेबल-कोर / रजिस्टर" पैरामीटर के साथ मोचा चला रहे हैं।

बबेल 6/7 + के लिए

  1. npm install @babel/preset-env --save-dev
  2. सामग्री के साथ प्रोजेक्ट के मूल में .babelrc जोड़ें:

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

सुनिश्चित करें कि आप --compilers js:babel-register (Babel 6) या --compilers js:@babel/register (Babel 7) पैरामीटर के साथ मोचा चला रहे हैं

मेरे प्रोजेक्ट में उचित प्रसेट्स (es2015) इन .bablrc सहित अन्य संबंधित प्रश्नों में दिए गए समाधान पहले से ही लागू हैं।

मेरे पास दो परियोजनाएं हैं (उन्हें ए और बी कहते हैं) जो दोनों ईएस 6 मॉड्यूल सिंटैक्स का उपयोग करते हैं। प्रोजेक्ट ए में, मैं प्रोजेक्ट बी आयात कर रहा हूं जो npm के माध्यम से स्थापित है और नोड_मॉडल फ़ोल्डर में रहता है। जब मैं प्रोजेक्ट A के लिए अपना परीक्षण सूट चलाता हूं, तो मुझे त्रुटि मिल रही है:

SyntaxError: अप्रत्याशित टोकन आयात

प्रोजेक्ट B से कोड की इस कथित त्रुटिपूर्ण लाइन से पहले कौन है:

(फ़ंक्शन (निर्यात, आवश्यकता, मॉड्यूल, __filename, __dirname) {आयात createBrowserHistory से istory इतिहास / lib / createBrowserHistory ’;

Iife कुछ npm या संभवतः बाबेल से संबंधित प्रतीत होता है क्योंकि मेरे स्रोत फ़ाइल में केवल "इतिहास / lib / createBrowserHistory" से आयात createBrowserHistory शामिल है; प्रोजेक्ट B के परीक्षण सूट में इकाई परीक्षण ठीक चलता है, और यदि प्रोजेक्ट B को एक निर्भरता के रूप में हटा दें; प्रोजेक्ट ए, मेरा परीक्षण सूट (फिर भी आंतरिक परियोजना मॉड्यूल के लिए es6 आयात का उपयोग करके) ठीक काम करता है।

पूर्ण स्टैक ट्रेस:

 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

यहाँ पैकेज से मेरा परीक्षण आदेश है। आगजनी:

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

यह StackOverflow पोस्ट समान है, लेकिन कमांड लाइन के मेरे उपयोग के लिए कोई समाधान पेश नहीं करता है: babel के साथ node_modules से एक मॉड्यूल आयात करें लेकिन विफल रहा


Babel 7 और Mocha 4 का उपयोग करने वाले किसी के लिए, पैकेज के कुछ नामों में थोड़ा बदलाव हुआ है और स्वीकृत उत्तर थोड़ा आउट-डेटेड है। मुझे क्या करना था:

npm install @babel/register --saveDev

और package.json में परीक्षण लाइन में --require @babel/register को जोड़ना

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

यदि आप उन का उपयोग कर रहे हैं तो @babel/polyfill कुछ चीजों को ठीक करता है जैसे कि async / प्रतीक्षित कार्यक्षमता।

आशा है कि किसी की मदद करता है :)


ऐसा लगता है कि एकमात्र समाधान स्पष्ट रूप से शामिल है:

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

एक परीक्षण सहायक फ़ाइल में, और मेरे परीक्षण कमांड में मोचा के साथ पास करें:

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

अंतिम समाधान:

RegisterBabel.js जोड़ें: एक अलग फ़ाइल जिसका काम बेबल-कोर / रजिस्टर की आवश्यकता है ...

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

यदि आपका आवेदन भी बेबल-नोड पर निर्भर करता है, तो एक प्रविष्टि जोड़ें। यह आपके es6 युक्त अनुप्रयोग के लिए एक आवरण के रूप में कार्य करता है।

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

फिर आप node entry साथ अपना आवेदन चलाएंगे

मोचा परीक्षण के लिए, TestHelper.js को रजिस्टरबेल की आवश्यकता होनी चाहिए। साथ ही साथ रन टाइम पर बेबल सपोर्ट को इनिशियलाइज़ करने के लिए।

require('./registerBabel');

और mocha --require ./testHelper.js '+(test)/**/*Spec.js' साथ अपने मोचा परीक्षण mocha --require ./testHelper.js '+(test)/**/*Spec.js'

यह "Spec.js" में समाप्त होने वाली किसी भी फ़ाइल का पुनरावर्ती परीक्षण "/ .est" में करेगा। अपनी परियोजना में ऐनक मिलान वाले पैटर्न को बदलें।


जब मैंने अपने कोड में import का उपयोग किया तो मैंने mocha स्थापित किया और उसी त्रुटि को पूरा किया। निम्नलिखित क्रियाएं करके, मुद्दा ठीक किया गया था।

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

और फिर एक .babelrc फ़ाइल जोड़ें:

{
    "presets": [
        "es2015"
    ]
}

और फिर इस तरह से mocha चलाएं:

mocha --compilers js:babel-core/register

मुझे बाबेल के साथ करने का सबसे आसान तरीका मिल गया। 6.XX को nyc का उपयोग करना था और फिर एक helper फाइल को pckage.json में pckage.json

तो यहाँ वही है जो मैंने इस्तेमाल किया

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')();

अब आप अपने परीक्षणों में या जहाँ भी आपको आवश्यकता हो, es6 का उपयोग करने में सक्षम होंगे। मेरा सब विफल हो रहा है;)

फिर npm run test जो nyc mocha --reporter tap 'test/**/*.spec.js'


मुझे भी यही समस्या थी। जब परीक्षण चल रहा है मुझे एहसास हुआ कि मैं वास्तव में आश्रित मॉड्यूल को स्टब करना चाहता था। यह इकाई परीक्षण के लिए अच्छा है और बाबेल को सबमॉड्यूल्स को बदलने से रोकता है। इसलिए मैंने proxyquire नाम का उपयोग किया:

const proxyquire = require('proxyquire').noCallThru()

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

मेरे पास एक ही मुद्दा था और बाबेल को मोचा के साथ एकीकृत करने के लिए बेबल प्रलेखन से पढ़कर इसे ठीक किया:

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

मैं उसी मुद्दे में भाग गया। स्टेकेओवरफ़्लो पर और उससे परे हर दूसरे समाधान की कोशिश करने के बाद, पैकेज पर इस सरल विन्यास को जोड़ना। मेरे लिए यह किया:

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

मेरे सभी ES6 आयातों ने उसके बाद काम किया। वैसे, मेरे पास webpack.config.js के अंदर भी यही कॉन्फ़िगरेशन था, लेकिन जाहिरा तौर पर यह मोचा परीक्षण के लिए भी काम करने का एकमात्र तरीका था।

आशा है कि यह किसी की मदद करता है।


मैंने आज सुबह इस मुद्दे को आधिकारिक 4 से निम्नलिखित निर्देशों के साथ हल कर दिया है।

एनपीएम मॉड्यूल स्थापित करें

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

या एक ही आदेश:

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

package.json :

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

.babelrc

{
  "presets": ["env"]
}

मैंने निम्नलिखित निर्देशों के साथ आज सुबह इस मुद्दे को हल किया

एनपीएम मॉड्यूल स्थापित करें

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"]
}

यहाँ मेरे लिए क्या काम किया है। --compilers ध्वज का उपयोग करने पर मुझे एक चेतावनी मिली।

पदावनत करना: "--कंपलर" को मोचा के भविष्य के संस्करण में हटा दिया जाएगा; अधिक जानकारी के लिए https://git.io/vdcSr देखें

इसलिए मैंने इसे --require ध्वज के साथ बदल दिया

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

यहाँ मेरे .babelrc :

{
  "presets": ["env"]
}

मेरा package.json देव निर्भरता

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

--compilers पदावनत है।

मेरा सरल उपाय:

npm install --save-dev babel-core

और package.json में अपने टेस्ट स्क्रिप्ट को इस तरह जोड़ें:

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