Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.2K
Visualizações
Jest detecta un mango abierto con la aplicación Express

He estado tratando de resolver esto por un tiempo, pero sin suerte. Inicialmente tuve el problema al realizar pruebas de integración simples con una base de datos MongoDB, pero eliminé el código y lo hice lo más simple posible. Lo único que tengo en ejecución es un solo archivo de prueba:

 // blah.test.js const express = require('express'); const app = express(); describe('test block', () => { let server = null; beforeEach(() => { server = app.listen(3000, () => console.log('Listening on port 3000')); }); afterEach(async () => { await server.close(); }); it('should pass the test', () => { expect(1).toBe(1); }); });

La prueba pasa, pero Jest me informa de un identificador abierto que podría evitar que salga:

ingrese la descripción de la imagen aquí

En esta ocasión sí salió, pero aún se nota una manija abierta. Me gustaría saber cómo cerrar esto de forma segura, sin forzar la salida. Con las pruebas anteriores, obtendría la misma advertencia de manija abierta, pero también un error que indica que Jest no salió un segundo después de completar las pruebas.

También intenté usar beforeAll() y afterAll() , en lugar de beforeEach() y afterEach() , pero sigo teniendo el mismo problema. Sé que la prueba no requiere el servidor en esta ocasión, pero estaba tratando de hacerlo lo más simple posible para tratar de encontrar el problema al abrir y cerrar el servidor.

ACTUALIZACIÓN: noté que parece funcionar bien tan pronto como agrego un segundo archivo de prueba:

 // blah2.test.js const express = require('express'); const app = express(); describe('test block', () => { let server = null; beforeEach(() => { server = app.listen(3000, () => console.log('Listening on port 3000')); }); afterEach(async () => { await server.close(); }); it('should pass the test', () => { expect(2).toBe(2); }); });

Sin manijas abiertas con dos pruebas en ejecución

Si alguien puede compartir alguna idea de por qué sucede esto, sería muy apreciado.

Estoy usando:

Expreso: 4.16.3

broma: 23.5.0

MNP: 6.3.0

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Así que resolví el problema abstrayendo toda la lógica de la aplicación en un archivo app.js :

 const express = require('express'); const routes = require('./routes'); const app = express(); app.use('/api', routes); module.exports = app

Luego creando un archivo server.js con toda la lógica de mi servidor:

 const app = require('./app.js') const PORT = process.env.PORT || 3000 app.listen(PORT, () => console.log(`Listening on port: ${PORT}`))

Luego solo importe app.js en su archivo de prueba de esta manera:

 const app = require('../app.js')

¡Funciona de maravilla!

over 4 years ago · Santiago Trujillo Relatório

0

Tuve el mismo problema y pude solucionarlo ayer. El problema es llamar a app.listen(). Debe evitar llamar a app.listen en su archivo app.js o archivo de prueba de broma. Simplemente exporte la aplicación con rutas desde app.js. Luego, puede usar supertest para realizar la solicitud en su prueba.

 // in your app.js const app = express(); // add routes and middleware module.exports = app; // in your test file import app from './app.js'; import supertest from 'supertest'; describe('test block', () => { it('test route', async (done) => { const res = await supertest(app).get('/').expect(200); done(); }); });
over 4 years ago · Santiago Trujillo Relatório

0

Prueba esto:

 beforeAll(async () => { // let's create a server to receive integration calls app = express(); app.get('/', (req, res) => res.send('Hello World!')); await new Promise((resolve) => { app.listen(6666, () => { console.log('Example app listening on port 6666!'); return resolve(); }); }); }); afterAll(() => { console.log('closing...'); app.close(); });
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda