在摩卡testing中使用es6

我试图将es6纳入我的服务器端代码。 在运行服务器时使用babel-node工作,但是我在运行mochatesting时遇到编译es6到es5代码的麻烦。

这是我的文件夹结构

我有一个server.js启动一个worker.js文件(它有快递服务器)

server.js文件

import {SocketCluster} from 'socketcluster'; const socketCluster = new SocketCluster({ workers:1, brokers:1, port: 3000, appName:null, workerController: __dirname + '/worker.js', brokerController: __dirname + '/broker.js', socketChannelLimit: 1000, crashWorkerOnError: true }) 

worker.js文件

 export const run = (worker) => { console.log(' >> worker PID: ',process.pid); const app = express(); const httpServer = worker.httpServer; const scServer = worker.scServer; app.use(cookieParser()) httpServer.on('request', app); app.get('/',(req,res) => { console.log('recieved') res.send('Hello world') }) } 

当手动运行服务器时,它可以与下面的脚本一起使用

 "start": "nodemon server/server.js --exec babel-node" 

然而,当我尝试与摩卡运行testing文件我得到一个“意外的令牌”导出“错误”

 (function (exports, require, module, __filename, __dirname) { export const run = (broker) => { ^^^^^^ SyntaxError: Unexpected token export at exports.runInThisContext (vm.js:53:16) at Module._compile (module.js:511:25) at Object.Module._extensions..js (module.js:550:10) at Module.load (module.js:456:32) at tryModuleLoad (module.js:415:12) at Function.Module._load (module.js:407:3) at Module.require (module.js:466:17) at require (internal/module.js:20:19) at initBrokerServer (/home/avernus/Desktop/projects/node-sc-react/node_modules/sc-broker/server.js:178:25) at process.<anonymous> (/home/avernus/Desktop/projects/node-sc-react/node_modules/sc-broker/server.js:498:9) 

这是开始摩卡testing的脚本

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

我是否缺less别的东西?

这是testing文件

 import server from '../../server/server'; import http from 'http'; import assert from 'assert'; import {expect} from 'chai'; describe('Express server',() =>{ it('should return "Hello World"',() => { http.get('http://127.0.0.1:3000',(res) => { expect(res).to.contain('wtf world') }) }) }) 

您需要使用Babel将testing脚本从ES2015ES5然后将其传递给mocha以运行testing。 你可以这样做,在package.json添加/编辑testing脚本

 ... "scripts": { "test": "mocha --compilers js:babel-core/register --recursive" }, ... 

原来我需要在我的server.js文件中指定一个initController来确保所有的文件都是由babel编译的。 这是我使用的websocket框架特有的问题。