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

91
Visualizações
NodeJs usando pg client - Jest ha detectado el siguiente identificador abierto que potencialmente evita que Jest salga - TCPWRAP

En algunas pruebas de integración en mi Node.js, uso pg para realizar una limpieza de la base de datos de pruebas de Postgres después de que se haya ejecutado la prueba. Llamo a esto en afterAll() :

 afterAll(() => { const { Pool } = require('pg') const connectionString = 'postgresql://' + PG_USER + ':' + PASSWORD + '@' + HOST + ':' + PG_PORT + '/' + DATABASE_TEST; const pool = new Pool({ connectionString, }) pool.query('TRUNCATE someTable RESTART IDENTITY CASCADE;', (err, res) => { pool.end(); })

Cuando ejecuto las pruebas de Jest en mi aplicación Node.js, aparece el error:

 Jest did not exit one second after the test run has completed. This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.

Cuando agrego --detectOpenHandles a mi script de test npm en package.json , obtengo lo siguiente:

 Jest has detected the following 1 open handle potentially keeping Jest from exiting: ● TCPWRAP > 259 | pool.query('TRUNCATE someTable RESTART IDENTITY CASCADE;', (err, res) => { | ^ 260 | 261 | pool.end(); 262 | })

Si muevo la conexión a la base de datos a un archivo separado (fuera de la carpeta __tests__ ), las pruebas Jest aún no salen (con el mismo error).

Si uso un Client pg y hago esto, obtengo un problema similar con client.connect()

 client.connect() client .query('TRUNCATE someTable RESTART IDENTITY CASCADE;') .then(() => client.end())

¿Alguien puede explicar lo que realmente está pasando aquí? ¿Jest intenta cerrar después de la prueba final, pero la operación en afterAll() lo impide? ¿Qué debo hacer para permitir que las pruebas salgan? Ninguna de las soluciones en otras preguntas SO similares se aplica a mi caso.

Actualizar

Probé la sugerencia de @Estus Flask, pero aún no soluciona el problema. Usando lo siguiente (que pasa done como la función de devolución de llamada, de modo que afterAll no se completará hasta que se llame a done() (que llamo cuando se resuelve la promesa pool.end() ):

 afterAll( done => { const { Pool } = require('pg') const connectionString = 'postgresql://' + PG_USER + ':' + PASSWORD + '@' + HOST + ':' + PG_PORT + '/' + DATABASE_TEST; const pool = new Pool({ connectionString, }) pool.query('TRUNCATE someTable RESTART IDENTITY CASCADE;', (err, res) => { pool.end().then(done()); }) }) });
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

No estoy seguro de si estoy en lo cierto, pero no parece que su pool.end esperado ni a través de await o a través de la promesa de la vieja moda. Prueba esto-

 afterAll(async () => { const { Pool } = require('pg') const connectionString = 'postgresql://' + PG_USER + ':' + PASSWORD + '@' + HOST + ':' + PG_PORT + '/' + DATABASE_TEST; const pool = new Pool({ connectionString, }) await pool.query('TRUNCATE someTable RESTART IDENTITY CASCADE;') await pool.end() }

Además, como se indica a continuación, postgres tiene una cantidad limitada de conexiones, por lo que siempre es una buena práctica cerrar las conexiones, especialmente en las pruebas.

De manera predeterminada, todas las implementaciones de PostgreSQL en Compose comienzan con un límite de conexión que establece la cantidad máxima de conexiones permitidas en 100.

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