3 votes

Utilisation de es6 sur les tests mocha

J'essaie d'incorporer es6 dans mon code côté serveur. L'utilisation de babel-node fonctionne lors de l'exécution du serveur, mais j'ai des difficultés à compiler le code es6 en code es5 lors de l'exécution des tests mocha.

Voici la structure de mon dossier

J'ai un fichier server.js qui démarre un fichier worker.js (qui contient le serveur express).

le fichier 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
})

le fichier 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')
  })

}

En exécutant le serveur manuellement, il fonctionne avec le script ci-dessous.

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

Cependant, lorsque j'essaie d'exécuter le fichier de test avec mocha, j'obtiens une erreur "unexpected token "export"".

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

c'est le script pour démarrer les tests mocha

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

Est-ce que j'ai manqué quelque chose d'autre ?

Voici le fichier de test

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')
    })
  })
})

3voto

nmrony Points 628

Vous devez transpiler les scripts de test à partir de ES2015 a ES5 en utilisant Babel avant de le passer à mocha pour exécuter les tests. Vous pouvez le faire comme suit : ajouter/modifier le test script en package.json

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

Mise à jour :

Mocha a supprimé l'option --compiler drapeau. Veuillez vérifier cette page pour plus d'informations. Le nouveau npm script devrait ressembler à ce qui suit

...
"scripts": {
  "test": "mocha --require babel-register --recursive"
},
...

-1voto

Kannaj Points 1802

Il s'avère que je dois spécifier un initController dans mon fichier server.js pour s'assurer que tous les fichiers sont compilés par babel. C'est un problème spécifique au framework websocket que j'utilise.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X