Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

92
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!