Babel นำเข้าโทเค็นที่ไม่คาดคิดเมื่อเรียกใช้การทดสอบมอคค่า


95

โซลูชันที่นำเสนอในคำถามอื่น ๆ ที่เกี่ยวข้องเช่นการรวมค่าพรีเซ็ตที่เหมาะสม (es2015) ใน. babelrc ถูกนำไปใช้ในโครงการของฉันแล้ว

ฉันมีสองโครงการ (ให้เรียกพวกเขาว่า A และ B) ซึ่งทั้งคู่ใช้ไวยากรณ์โมดูล ES6 ในโครงการ A ฉันกำลังนำเข้าโครงการ B ซึ่งติดตั้งผ่าน npm และอยู่ในโฟลเดอร์ node_modules เมื่อฉันเรียกใช้ชุดทดสอบสำหรับโครงการ A ฉันได้รับข้อผิดพลาด:

SyntaxError: การนำเข้าโทเค็นที่ไม่คาดคิด

ซึ่งนำหน้าด้วยบรรทัดรหัสที่ผิดพลาดจากโครงการ B:

(ฟังก์ชัน (ส่งออกต้องการโมดูล __filename __dirname) {นำเข้า createBrowserHistory จาก 'history / lib / createBrowserHistory';

iife ดูเหมือนจะเป็นสิ่งที่ npm หรืออาจเกี่ยวข้องกับ babel เนื่องจากไฟล์ต้นฉบับของฉันมีเพียง "import createBrowserHistory จาก" history / lib / createBrowserHistory "การทดสอบหน่วยในชุดทดสอบของ Project B ทำงานได้ดีและถ้าฉันลบ Project B เป็นการอ้างอิงจาก โครงการ A ชุดทดสอบของฉัน (ยังคงใช้การนำเข้า 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

นี่คือคำสั่งทดสอบของฉันจาก package.json:

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

โพสต์ StackOverflow นี้คล้ายกัน แต่ไม่มีวิธีแก้ปัญหาสำหรับการใช้บรรทัดคำสั่งของฉัน: นำเข้าโมดูลจาก node_modules ด้วย babel แต่ล้มเหลว


1
หากคุณกำลังแจกจ่ายโมดูลใน npm คุณควรแจกจ่ายเฉพาะรุ่นที่แยกได้ของโมดูลนั้นเท่านั้น
loganfsmyth

โครงการนี้มีน้ำหนักเบามาก ส่วนใหญ่มีไว้สำหรับการใช้งานของฉันเองหรืออื่น ๆ หากมีกระบวนการคายน้ำที่สามารถรองรับได้ ฉันพยายามบรรลุ "vanilla es6" ในการอ้างอิงเหล่านี้
ThinkingInBits

2
ฉันคิดว่าคุณลืมกำหนดค่า babel ใน package.json เพิ่มสิ่งเหล่านั้นลงใน package.json ของคุณ "babel": {"presets": ["es2015"]}
Jacob

3
หมายเหตุ: ตามเอกสารประกอบ --compilersไม่จำเป็น--require babel-registerควรใช้แทน: "หากโมดูล ES6 ของคุณมีนามสกุล. js คุณสามารถ npm ติดตั้ง - บันทึก - dev babel-register และใช้ mocha --require babel-register; --compilers จำเป็นก็ต่อเมื่อคุณต้องการระบุนามสกุลไฟล์ "
ลองจับในที่สุด

1
ในที่สุดฉันก็สามารถทำให้"babel":{"presets": ["es2015"]}มันใช้งานได้โดยใช้มันเป็นสิ่งสุดท้ายที่ฉันขาดหายไป!
Brandon

คำตอบ:


81

สำหรับ Babel <6

วิธีที่ง่ายที่สุดในการแก้ปัญหานี้คือ:

  1. npm install babel-preset-es2015 --save-dev
  2. เพิ่ม.babelrcในรูทของโปรเจ็กต์พร้อมเนื้อหา:

    {
     "presets": [ "es2015" ]
    }
    

ตรวจสอบให้แน่ใจว่าคุณกำลังเรียกใช้ mocha ด้วยพารามิเตอร์ "--compilers js: babel-core / register"

สำหรับ Babel6 / 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)

สำหรับมอคค่าเวอร์ชัน 7 ขึ้นไปให้ใช้--require babel-registerหรือ--require @babel/registerตามลำดับ


27
ลองใช้มอคค่าด้วย - ต้องการ babel-register param
kolec

2
@kolec นี้ได้ผล แม้ว่าจะดีกว่าให้สร้างmocha.optsไฟล์ในรูทของไดเร็กทอรี / test และเพิ่มที่นั่น
Martin Dawson

3
ทั้งหมดนี้ยังไม่ช่วยอะไร (command-line ไม่ใช่ mocha.opts)
Kev

3
หากคุณต้องการใช้ es2016 โปรดทราบว่า es2016 ใน Babel "รวบรวมเฉพาะสิ่งที่อยู่ใน ES2016 ถึง ES2015" ดังนั้นคุณต้องมีทั้ง es2016 และ es2015 ในอาร์เรย์ที่ตั้งไว้ล่วงหน้า
prauchfuss

4
--compilersเลิกใช้งานแล้ว ใช้--requireแทน
robsch

46

ดูเหมือนว่าทางออกเดียวคือรวมไว้อย่างชัดเจน:

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

ในไฟล์ผู้ช่วยทดสอบและส่งต่อไปยังมอคค่าในคำสั่งทดสอบของฉัน:

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

ทางออกสุดท้าย:

เพิ่มregisterBabel.js : ไฟล์แยกที่มีงานต้องใช้ babel-core / register ...

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

เพิ่มentry.jsหากแอปพลิเคชันของคุณอาศัย babel-node ด้วย สิ่งนี้ทำหน้าที่เป็นกระดาษห่อหุ้มสำหรับแอปพลิเคชัน es6 ของคุณ

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

จากนั้นคุณจะเรียกใช้แอปพลิเคชันของคุณด้วยไฟล์ node entry

สำหรับการทดสอบมอคค่าtestHelper.jsควรต้องมี registerBabel.js เช่นกันเพื่อเริ่มต้นการสนับสนุน babel ในขณะดำเนินการ

require('./registerBabel');

และทำการทดสอบมอคค่าของคุณด้วย mocha --require ./testHelper.js '+(test)/**/*Spec.js'

การดำเนินการนี้จะทดสอบไฟล์ที่ลงท้ายด้วย "Spec.js" ภายใน "./test" แบบวนซ้ำ แทนที่รูปแบบด้วยรูปแบบที่ตรงกับข้อกำหนดในโครงการของคุณ


3
ดูเหมือนว่าignoreregex จะปิดอยู่เล็กน้อย ฉันต้องเพิ่มแบ็กสแลชที่หลบหนีทันทีหลังจาก node_modules: ignore: /node_modules\/(?!ProjectB)/เพื่อให้ไฟล์ babelRegister ทำงานได้ อย่างอื่นดูเหมือนดี!
hellatan

สิ่งนี้ไม่อนุญาตให้เราใช้ Rollupify เนื่องจากต้องใช้งบ คุณจะรู้วิธีการทำสิ่งนี้โดยไม่ต้องใช้คำสั่งหรือไม่?
MikesBarto2002

นี่เป็นสิ่งที่ดี แต่สิ่งที่เกี่ยวกับเครื่องมือที่ไม่อนุญาตให้เพิ่มโค้ดเช่นนี้และต้องการเรียกใช้ไฟล์ของคุณโดยตรง จากนั้นคุณจะจบลงด้วยbabel-nodeสิ่งที่ไม่อนุญาตให้ใช้สิ่ง.babelrcนั้น
Evgeny

1
คุณเจ๋งจริงๆ! Babel กำลังประมวลผลรหัส ES6 ของฉันเมื่อเพิ่งเรียกใช้เซิร์ฟเวอร์ แต่การทดสอบมอคค่าจะล้มเหลว คำตอบของคุณแก้ไขได้ ฉันลอง --compilers ใน mocha.opts แต่นั่นทำให้คำสั่งนำเข้าล้มเหลว
Energetic Pixels

1
ฉันไม่สามารถใช้งานได้ แต่กลับกลายเป็นว่าฉันต้องขยาย babelrc ด้วย: `` require ('@ babel / register') ({ขยาย: './.babelrc', ละเว้น: [/ node_modules \ / (?! ProjectB) /]}); ``
TiggerToo

26

แน่ใจว่าคุณจะมีปัญหานั้นคุณกำลังใช้ ES6 ที่มอคค่าไม่รู้

คุณจึงใช้ babel แต่ไม่ได้ใช้ในการทดสอบ ...

วิธีแก้ปัญหาเล็กน้อย:

A. ถ้าคุณทำงานโดยใช้ NPM

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

ฉันกำลังใช้

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

C. จาก cli:

มอคค่า - คอมไพเลอร์ js: babel-core / register test * .js

สามารถอ่านเพิ่มเติมได้ที่http://www.pauleveritt.org/articles/pylyglot/es6_imports/


1
ขอบคุณมาก! ฉันขาดตัวเลือก --compilers js: babel-core / register
mycargus

1
ฉันทำไปแล้ว ... คุณได้อ่านคำถามเริ่มต้นหรือยัง
ThinkingInBits

1
@ThinkingInBits คุณใช้อะไรได้บ้างคุณ (ถ้าคุณ) แก้ไขปัญหาได้อย่างไร ฉันมีปัญหาร้ายแรงที่นี่ลองใช้ตัวเลือกเหล่านี้เกือบทั้งหมด
Milan Velebit

--compilersเลิกใช้แล้วตอนนี้ดูเหมือนว่า--requireจะเป็นทางเลือกเดียวที่ปลอดภัย
Ali Ghanavatian

23

ฉันพบปัญหาเดียวกันนั้น หลังจากลองใช้วิธีแก้ปัญหาอื่น ๆ ใน stackoverflow และอื่น ๆ แล้วการเพิ่ม config แบบง่ายนี้บน package.json ก็ทำเพื่อฉัน:

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

การนำเข้า ES6 ทั้งหมดของฉันใช้งานได้หลังจากนั้น อย่างไรก็ตามฉันมีการกำหนดค่าเดียวกันนี้ใน webpack.config.js แต่เห็นได้ชัดว่านี่เป็นวิธีเดียวที่จะทำให้มันใช้งานได้กับการทดสอบมอคค่าเช่นกัน

หวังว่านี่จะช่วยใครบางคนได้


ฉันมีไฟล์. babelrc ที่สะกดไม่ถูกต้องดังนั้นจึงใช้งานไม่ได้ในตอนแรก โซลูชันนี้ใช้ได้ผลและเป็นโซลูชันที่แนะนำ สร้างไฟล์. babelrc ในโปรเจ็กต์ของคุณและเพิ่ม {"presets": ["es2015"]}
AfDev

14

ฉันมี{"modules": false}ในไฟล์. babelrc ของฉันดังนี้:

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

ซึ่งกำลังขว้างปา

การนำเข้าโทเค็นที่ไม่คาดคิด

เมื่อฉันเอามันออกมอคค่าก็วิ่งได้สำเร็จ


สิ่งนี้สร้างขึ้นโดย Webpacker สำหรับ Rails: `` "presets": [["env", {"modules": false, "target": {"browser": "> 1%", "uglify": true}, "useBuiltIns": true}], "react" `` เมื่อฉันลบบรรทัดโมดูลมันก็ใช้ได้
emptywalls

สิ่งนี้ช่วยแก้ปัญหาของฉันเมื่อ CircleCI ไม่สามารถเรียกใช้การทดสอบหน่วย jest ของฉันและทำให้ฉันมีข้อผิดพลาดในการนำเข้าโทเค็นที่ไม่คาดคิด +1!
Candlejack

สิ่งนี้ทำเพื่อฉัน Rails, Webpacker และอื่น ๆ ... ขอบคุณ!
emptywalls

8

ฉันมีปัญหาเดียวกันและแก้ไขได้โดยอ่านจากเอกสารของ Babel สำหรับการรวม Babel กับ Mocha:

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

Mocha และ Babel รุ่นใด
Ognyan Dimitrov

เวอร์ชัน Babel ของฉัน6.26.0ยกเว้น"babel-preset-env": "1.6.0"และ "mocha": "3.5.3"
60

แปลก. สิ่งนี้ช่วยแก้ปัญหาของฉันได้และเป็นปัญหาการอ่านเอกสารอย่างแท้จริงในกรณีของฉัน
Ognyan Dimitrov

6

สำหรับใครก็ตามที่ใช้ Babel 7 และ Mocha 4 ชื่อแพ็กเกจบางส่วนมีการเปลี่ยนแปลงเล็กน้อยและคำตอบที่ยอมรับนั้นค่อนข้างล้าสมัย สิ่งที่ฉันต้องทำคือ:

npm install @babel/register --saveDev

และเพิ่ม--require @babel/registerบรรทัดการทดสอบในpackage.json

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

การ@babel/polyfillแก้ไขบางอย่างเช่น async / await ฟังก์ชันการทำงานหากคุณใช้สิ่งเหล่านี้

หวังว่าจะช่วยใครสักคน :)


4

ฉันกำลังเพิ่มคำตอบ ES6 + mocha + babel config อื่นที่นี่ปัจจุบัน ณ เดือนมิถุนายน '19 (อ้างถึงวันที่ในคำตอบ / ความคิดเห็น) mocha ได้เลิกใช้งาน--compilerแฟล็กแล้วและเวอร์ชันที่ฉันใช้นั้นไม่สามารถใช้งานได้แม้จะมี--no-deprecationแฟล็ก cf นี้

โปรดทราบว่าฉันจะไม่รวมบิตที่เกี่ยวข้องทั้งหมดจากหน้าที่เชื่อมโยงเพราะไม่มีบิตใดที่ทำให้ฉันได้รับการสร้างการทดสอบที่สะอาดตามเวอร์ชันล่าสุดของมอคค่าและบาเบล คำตอบนี้ควรรวมถึงขั้นตอนที่ทำให้ฉันสามารถสร้างแบบทดสอบที่ประสบความสำเร็จ

ทำตามคำแนะนำที่นี่และในคำตอบนี้และที่นี่ฉันได้ลองติดตั้งสิ่งที่ดูเหมือนจะเป็น babel ล่าสุดขั้นต่ำโดยใช้npm install:

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

และฉันปรับการเรียกมอคค่าใน package.json ดังนี้:

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

สิ่งนี้นำไปสู่ข้อผิดพลาด:

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

ข้างต้น--no-deprecationไม่ได้ช่วยโปรดอ้างอิงหน้าที่ลิงก์ด้านบน ดังนั้นทำตามคำแนะนำจากที่นี่ฉันจึงปรับ package.json:

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

และเริ่มเห็นข้อผิดพลาดเกี่ยวกับการค้นหาโมดูล babel เช่น:

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

ณ จุดนี้ฉันเริ่มติดตั้งแพ็คเกจ babel จนกว่าจะก้าวหน้า ฉันเชื่อว่าการติดตั้งแบบเต็มเป็นสิ่งที่ต้องการ:

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

การเปลี่ยนแปลงสุดท้ายที่จำเป็นคือการอัปเดตการเรียกใช้มอคค่าใน package.json โดยลบjs:คำนำหน้าดังนี้:

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

ฉันไม่สามารถตอบได้ว่าทำไมจึงจำเป็น: หากมีใครสามารถตอบได้โปรดแสดงความคิดเห็นและฉันจะอัปเดตคำตอบของฉันด้วยข้อมูลที่ดีขึ้น

สิ่งสุดท้ายที่ฉันทำคือสร้าง. babelrc ในไดเรกทอรีโครงการโดยมีเนื้อหา:

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

ฉันจำสิ่งที่กระตุ้นสิ่งนี้ไม่ได้ แต่ฉันเชื่อว่าเป็นเพราะมอคค่ายังคงบ่นเกี่ยวกับการไม่รู้จักimportคีย์เวิร์ดใน test.js ของฉัน ข้างต้นหากมีใครสามารถตอบได้โปรดแสดงความคิดเห็นและฉันจะอัปเดตคำตอบของฉันด้วยข้อมูลที่ดีขึ้น


ณ จุดนี้ฉันสามารถทำการทดสอบมอคค่าได้สำเร็จ ฉันตระหนักดีว่ามีช่องว่างในความรู้ของฉันที่นี่ฉันได้เขียนโค้ดจาวาสคริปต์สำหรับการผลิตจำนวนมาก แต่ฉันเป็น noob โหนดสัมพัทธ์ ใครก็ตามที่เห็นสิ่งนี้พร้อมเพิ่มคำตอบโปรดแสดงความคิดเห็นและฉันจะปรับปรุงคำตอบหรือแสดงคำตอบที่ดีกว่าของคุณเอง
pb2q

3

--compilers เลิกใช้งานแล้ว

วิธีง่ายๆของฉัน:

npm install --save-dev babel-core

และใน package.json เพิ่มสคริปต์ทดสอบของคุณดังนี้:

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

2

ฉันพบวิธีที่ง่ายที่สุดในการใช้ babel 6.XX คือใช้ nyc จากนั้นเพิ่มhelperไฟล์ลงในไฟล์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'


2

นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน ฉันได้รับคำเตือนเมื่อใช้--compilersธง

DeprecationWarning: "--compilers" จะถูกลบออกใน Mocha เวอร์ชันอนาคต ดู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",
}

2

ฉันแก้ไขปัญหานี้เมื่อเช้านี้ด้วยคำแนะนำต่อไปนี้

ติดตั้งโมดูล 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"]
}

1

ฉันแก้ไขปัญหานี้เมื่อเช้านี้ด้วยคำแนะนำต่อไปนี้จากคำแนะนำอย่างเป็นทางการในการใช้ Babelสำหรับ Mocha 4:

ติดตั้งโมดูล NPM

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


0

ฉันติดตั้งmochaและพบข้อผิดพลาดเดียวกันimportทุกประการเมื่อฉันใช้ในรหัสของฉัน ด้วยการดำเนินการต่อไปนี้ปัญหาได้รับการแก้ไขแล้ว

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

-1

ผมมีปัญหาเหมือนกัน. เมื่อเรียกใช้การทดสอบฉันตระหนักว่าจริงๆแล้วฉันต้องการที่จะตัดโมดูลที่พึ่งพา เหมาะสำหรับการทดสอบหน่วยและป้องกันไม่ให้ Babel เปลี่ยนโมดูลย่อย ดังนั้นฉันจึงใช้proxyquireกล่าวคือ:

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

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

อันนี้เหมาะกว่าเป็นความคิดเห็น
Gajus

-3

สำหรับการตั้งค่าการพิสูจน์ในอนาคตเพิ่มเติม

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

และใน. babelrc

{
  "presets": [ "latest" ]
}

ตรงข้ามกับ...

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

และ

{
 "presets": [ "es2015" ]
}

2
ฉันเดาว่าคำตอบนี้ไม่เกี่ยวข้องกับคำถามนี้.. หรืออาจจะเพิ่มเป็นความคิดเห็นสำหรับคำตอบอื่นก็ได้
62mkv

@ 62mkv ขอบคุณ! วิธีที่จะเป็นเหยี่ยวและรักษาสถานที่นี้ให้สะอาด
Phil Henry Mcboob
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.