Revisé otras respuestas como esta Prueba de la API de Mocha: obteniendo 'TypeError: app.address is not a function' y parece que el problema principal del error no es exportar el servidor, pero creo que lo estoy haciendo.
Aquí está mi archivo de prueba spec.js
var request = require('supertest'); describe('loading express', function () { var server; beforeEach(function () { delete require.cache[require.resolve('./index')]; server = require('./index'); }); afterEach(function (done) { server.close(done); }); it('responds to /', function testSlash(done) { request(server) .get('/') .expect(200, done); });Aquí está mi archivo index.js
import bodyParser from "body-parser"; import cookieParser from "cookie-parser"; import cors from "cors"; import express from "express"; import _ from "lodash"; import serveStatic from "serve-static"; const port = 8000; export default (app) => { app.use(express.json({ limit: "50mb" })); app.use( express.urlencoded({ extended: true }) ); app.use(bodyParser.json({ limit: "50mb" })); app.use(cors()); app.use(serveStatic("dist/", { index: ["index.html"] })); app.use(cookieParser()); if (_.isNil(process.env.APP_ENV)) { process.env.APP_ENV = "LOCAL"; } // ... A load of variables and functions in here // simple function to test app.get('/', function (req, res) { res.status(200).send('ok'); }); var server = app.listen(port, function () { var port = server.address().port; console.log('Example app listening at port %s', port); }); module.exports = server; };index.js está exportando una función que toma la app como argumento. Entonces, la importación de index.js es una función que debe llamarse con la app .
especificación.js
server = require('./index'); // replace with server = require('./index')(app); Asumiendo que esto permanece como una función, y lo llamas con app en spec.js , como arriba, entonces puedes obtener server reemplazando module.exports = server; con return server; .
prueba.js
module.exports = server; // replace with return server; Por separado, también hay una combinación de Módulos ES ( import/export ) y Módulos CommonJS ( module.exports/require ) que pueden dar como resultado una variedad de comportamientos extraños. Si puede estandarizar solo uno de estos, será de gran ayuda.
Pero si continúa usando require('./index') para importar index.js , que es un módulo ES, es posible que deba probar require('./index').default en su lugar, para obtener esa exportación default .