在 mocha 测试中使用 es6
Using es6 on mocha tests
我正在尝试将 es6 合并到我的服务器端代码中。当 运行 服务器时使用 babel-node 工作,但是当 运行 mocha 测试时我无法将 es6 编译为 es5 代码。
这是我的文件夹结构
我有一个 server.js 启动了一个 worker.js 文件(它有 express 服务器)
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"
然而,当我尝试 运行 带有 mocha 的测试文件时,我得到一个 'unexpected token "export" error'
(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)
这是启动 mocha 测试的脚本
"test": "mocha test/server/*.js --compilers js:babel-register"
我还漏掉了什么吗?
这是测试文件
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 将测试脚本从 ES2015
转换为 ES5
,然后再将其传递给 mocha 以进行 运行 测试。您可以按照 adding/editing package.json
中的测试脚本进行操作
...
"scripts": {
"test": "mocha --compilers js:babel-core/register --recursive"
},
...
更新:
Mocha 弃用了 --compiler
标志。请查看 this page 了解更多信息。新的 npm 脚本应该如下所示
...
"scripts": {
"test": "mocha --require babel-register --recursive"
},
...
原来我需要在我的 server.js 文件中指定一个 initController
以确保所有文件都由 babel 编译。这是我使用的 websocket 框架特有的问题。
我正在尝试将 es6 合并到我的服务器端代码中。当 运行 服务器时使用 babel-node 工作,但是当 运行 mocha 测试时我无法将 es6 编译为 es5 代码。
这是我的文件夹结构
我有一个 server.js 启动了一个 worker.js 文件(它有 express 服务器)
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"
然而,当我尝试 运行 带有 mocha 的测试文件时,我得到一个 'unexpected token "export" error'
(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)
这是启动 mocha 测试的脚本
"test": "mocha test/server/*.js --compilers js:babel-register"
我还漏掉了什么吗?
这是测试文件
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 将测试脚本从 ES2015
转换为 ES5
,然后再将其传递给 mocha 以进行 运行 测试。您可以按照 adding/editing package.json
...
"scripts": {
"test": "mocha --compilers js:babel-core/register --recursive"
},
...
更新:
Mocha 弃用了 --compiler
标志。请查看 this page 了解更多信息。新的 npm 脚本应该如下所示
...
"scripts": {
"test": "mocha --require babel-register --recursive"
},
...
原来我需要在我的 server.js 文件中指定一个 initController
以确保所有文件都由 babel 编译。这是我使用的 websocket 框架特有的问题。