在摩卡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脚本从ES2015
到ES5
然后将其传递给mocha以运行testing。 你可以这样做,在package.json
添加/编辑testing脚本
... "scripts": { "test": "mocha --compilers js:babel-core/register --recursive" }, ...
原来我需要在我的server.js文件中指定一个initController
来确保所有的文件都是由babel编译的。 这是我使用的websocket框架特有的问题。