[AI Dev Tools Zoomcamp] Node.js test runner hangs when testing Socket.io and Express integration
Los mantenedores suelen responder en 3 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 85/100
- Tipo de issue
- Documentación
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- express, javascript, node.js
- Área
- backend, documentation, testing-qa
Línea de trabajo
Comienza revisando los cambios propuestos en el issue para server/index.js, tests/integration.test.js y package.json. Verifica que la guía documentada cubra el inicio protegido del servidor, la limpieza de Socket.io y del servidor HTTP, y el comando de pruebas; está listo cuando las FAQ expliquen claramente cómo evitar el bloqueo o el error ERR_SERVER_ALREADY_LISTEN.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Course & Homework
- Course: AI Dev Tools Zoomcamp (2026)
- Module: Homework 2 - Build and Ship an AI-Assisted Full-Stack App
Problem Description
When running integration tests for a collaborative full-stack application using Node.js's built-in test runner (node --test) against an Express and Socket.io server, the test process hangs indefinitely in the terminal after executing, or fails with ERR_SERVER_ALREADY_LISTEN.
Root Cause
- Premature port binding: If
server.listen(PORT)is executed at the top level ofserver/index.js, importing the app/server intotests/integration.test.jscauses the HTTP server to bind before the test hook can bind to an ephemeral port (0). - Open handles: Socket.io and
http.Servermaintain persistent event loop connections and internal heartbeat timers, preventing Node's test runner from detecting an empty event loop.
Solution & Best Practice
-
Guard
server.listeninserver/index.js:
Ensure the server only listens when executed directly, not when imported by test suites:if (require.main === module) { server.listen(PORT, () => { console.log(`Server listening on port ${PORT}`); }); } -
Explicitly close both
ioandserverin the test cleanup hook:after(async () => { io.close(); await new Promise((resolve) => serverInstance.close(resolve)); }); -
Use
--test-force-exitinpackage.json:
Add--test-force-exitso Node exits cleanly once all tests pass:"scripts": { "test": "node --test --test-force-exit tests/*.test.js" }
- Lenguaje dominante
- Python
- Estrellas
- 7
- Forks
- 19
- Merge medio
- 3 d 20 h
- PR fusionados (30 d)
- 9
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de DataTalksClub/faq
-
faq-proposal
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
DataTalksClub/faq#417 · 1 comentario ·
Los mantenedores suelen responder en 3 días
-
faq-proposal
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
DataTalksClub/faq#415 · 1 comentario ·
Los mantenedores suelen responder en 3 días
-
faq-proposal
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
DataTalksClub/faq#413 · 1 comentario ·
Los mantenedores suelen responder en 3 días
-
faq-proposal
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
DataTalksClub/faq#411 · 1 comentario ·
Los mantenedores suelen responder en 3 días
-
[FAQ]Abiertofaq-proposal
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
DataTalksClub/faq#409 · 1 comentario ·
Los mantenedores suelen responder en 3 días
Todos los issues de DataTalksClub/faq
Issues similares
-
[Bug] @deck.gl/arcgis dist import resolves to unpublished @deck.gl/core source path (9.3.11, 9.4.0)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
workflow: a tick's dispatch counts as 'only this step', and no review self-grants a round unattendedAbiertoworkflow
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
kristofdegrave/homeassistant-smart-charging#1505 ·
Los mantenedores suelen responder en 1 día
-
New Submission: TropWATERAbiertometadata submission
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
Wrongly named dashboard variableAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
canonical/content-cache-operator#163 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[submission]Abiertosubmission
Dificultad 1/5 Menos de una hora Aptitud para principiantes 65/100
leanprover/lean-eval-submissions#1852 ·
Los mantenedores suelen responder en 1 día