J'obtiens cette erreur lors du test unitaire du code,
2 réussites (14ms) 1 échec
1) Erreur non interceptée en dehors de la suite de tests: Erreur non interceptée: écoute EADDRINUSE: adresse déjà utilisée ::: 3000 à Server.setupListenHandle [as _listen2] (net.js: 1255: 14) à listenInCluster (net.js: 1303: 12) sur Server.listen (net.js: 1391: 7) à Function.listen (node_modules / express / lib / application.js: 618: 24) sur Object.listen (main.js: 39: 5) à Module._compile (interne / modules / cjs / loader.js: 721: 30) à Module._compile (node_modules / pirates / lib / index.js: 99: 24) à Module._extensions..js (interne / modules / cjs / loader.js: 732: 10) à Object.newLoader [as .js] (node_modules / pirates / lib / index.js: 104: 7) à Module.load (interne / modules / cjs / loader.js: 620: 32) à tryModuleLoad (interne / modules / cjs / loader.js: 560: 12) à Function.Module._load (internal / modules / cjs / loader.js: 552: 3) à Module.require (interne / modules / cjs / loader.js: 657: 17) à require (interne / modules / cjs / helpers.js: 22: 18) à Object. (test / main.test.js: 4: 1) à Module._compile (interne / modules / cjs / loader.js: 721: 30) à Module._compile (node_modules / pirates / lib / index.js: 99: 24) à Module._extensions..js (interne / modules / cjs / loader.js: 732: 10) à Object.newLoader [as .js] (node_modules / pirates / lib / index.js: 104: 7) à Module.load (interne / modules / cjs / loader.js: 620: 32) à tryModuleLoad (interne / modules / cjs / loader.js: 560: 12) à Function.Module._load (internal / modules / cjs / loader.js: 552: 3) à Module.require (interne / modules / cjs / loader.js: 657: 17) à require (interne / modules / cjs / helpers.js: 22: 18) à Array.forEach () sur StatWatcher.onchange (interne / fs / watchers.js: 50: 8)
J'utilise moka , et j'ai --watch
sur mon package.json. J'utilise une approche es6 pour exprimer.
import chai from "chai" import chaiHttp from 'chai-http'; import request from 'request'; import server from '../main'; const expect = chai.expect; const should = chai.should(); chai.use(chaiHttp); // should get / describe('should GET /', () => { it('should get 200 status', (done) =>{ chai.request(server) .get('/') .end( (err, res) => { res.should.have.status(200); done(); }); }); }) // should check for Hello World! describe('Should check for Hello World! text', () => { it('should check for hello world text', (done) =>{ chai.request(server) .get('/') .end( (err, res) => { expect(res.body).to.be.an('object') // works expect(res.text).to.equal('Hello World!') // use res.text to check for res.send() text done(); }) }) })
import 'dotenv/config'; import cors from 'cors'; import express from 'express'; import logger from 'morgan'; import path from 'path'; import bodyParser from 'body-parser'; import cookieParser from 'cookie-parser'; import userRoute from './routes/users'; const app = express(); app.use(cors()); app.use(logger('dev')); // For React Stuff if need be // app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname, 'build'))); app.use(cookieParser()); app.use(bodyParser.json()); app.get('/', (req, res) => { res.send('Hello World!'); }); app.use('/users', userRoute); app.use(() => (req, res, next) =>{ res.locals.user = req.user; // This is the important line // req.session.user = user console.log(res.locals.user); next(); }); app.use(bodyParser.urlencoded({ extended:false})); //build mode // app.get('*', (req, res) => { // res.sendFile(path.join(__dirname+'/client/public/index.html')); // }) app.listen(process.env.PORT, () => console.log(`Example app listening on port ${process.env.PORT}!`), ); export default app;
{ "name": "elies6express", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "./node_modules/.bin/mocha --watch --require @babel/register", "start": "nodemon --exec babel-node main.js" }, "author": "", "license": "ISC", "dependencies": { "body-parser": "^1.19.0", "bookshelf": "^0.14.2", "chai-http": "^4.3.0", "cookie-parser": "^1.4.4", "cors": "^2.8.5", "dotenv": "^8.0.0", "express": "^4.17.0", "knex": "^0.16.5", "morgan": "^1.9.1", "path": "^0.12.7", "pg": "^7.11.0" }, "devDependencies": { "@babel/cli": "^7.4.4", "@babel/core": "^7.4.5", "@babel/node": "^7.4.5", "@babel/preset-env": "^7.4.5", "@babel/register": "^7.4.4", "chai": "^4.2.0", "mocha": "^6.1.4", "nodemon": "^1.19.0", "reify": "^0.19.1", "request": "^2.88.0" } }
3 Réponses :
Cela signifie que quelque chose tourne déjà sur le port 3000. Vous devez arrêter cela, puis démarrer votre application. Ou changez simplement le port de votre application en autre chose.
Pour libérer le port 3000, utilisez:
fuser -k 3000 / tcp
ou
var port = 8000; app.listen(port, () => console.log(`Example app listening on port ${port}!`), );
Pour changer le port de votre application:
kill $(sudo lsof -t -i:3000)
merci mais cela ne résout pas le problème, j'ai essayé cela, le problème persiste. Gardez à l'esprit que j'utilise la fonction mochas --watch. Je souhaite pouvoir modifier le code pendant l'exécution du test npm. Je ne veux pas conserver le test npm
chaque fois que je change de code.
Dans main.js
, placez votre appel app.listen
dans un test pour ! module.parent
, comme ceci:
if(!module.parent){ app.listen(process.env.PORT, () => console.log(`Example app listening on port ${process.env.PORT}!`), ); }
Source: http://www.marcusoft.net/2015/10/eaddrinuse-when-watching-tests-with-mocha-and-supertest.html
"testwatch": "nodemon --exec \" mocha --recursive \ ""
servira à 100%
votre objectif jusqu'à ce que la bibliothèque de test publie quelque chose de plus pertinent