Dos archivos usando supertest con mocha causando EADDRINUSE

Estoy usando supertest para probar de forma unitaria las configuraciones de mi servidor y los controladores de ruta. Las pruebas de configuración del servidor están en test.server.js y las pruebas de manejo de rutas están en test.routes.handlers.js .

Cuando ejecuto todos los archivos de prueba usando mocha . , Me sale EADDRINUSE . Cuando ejecuto cada archivo individualmente, todo funciona como se espera.

Ambos archivos definen y requieren supertest, request = require('supertest') , y el archivo del servidor express, app = require('../server.js') . En server.js , el servidor se inicia así:

 http.createServer(app).listen(app.get('port'), config.hostName, function () { console.log('Express server listening on port ' + app.get('port')); }); 

¿Hay algo mal en mi implementación? ¿Cómo puedo evitar el error EADDRINUSE al ejecutar mis pruebas?

mocha tiene una raíz Suite :

You may also pick any file and add "root" level hooks, for example add beforeEach() outside of describe()s then the callback will run before any test-case regardless of the file its in. This is because Mocha has a root Suite with no name.

Lo usamos para iniciar un servidor Express una vez (y usamos una variable de entorno para que se ejecute en un puerto diferente al de nuestro servidor de desarrollo):

 before(function () { process.env.NODE_ENV = 'test'; require('../../app.js'); }); 

(No necesitamos done() un done() aquí porque el requisito es síncrono). Esto era, el servidor se inicia exactamente una vez, sin importar cuántos archivos de prueba diferentes incluyan esta función before nivel raíz.

Intente exigir supertest desde un nivel raíz antes de la función en cada uno de sus archivos.

Respondiendo a mi propia pregunta:

Mi inicialización supertest se ve así:

 var app = require('../server.js'); var request = require('supertest')(app); 

En test.server.js , tuve estas declaraciones de requisitos directamente dentro de una describe . En test.routes.handlers.js , las afirmaciones estaban dentro de before dentro de una describe .

Después de leer la respuesta de Dankohn , me inspiró simplemente mover las afirmaciones al máximo fuera de cualquier describe o before y todas las pruebas se ejecutan sin problemas ahora.