[AI Dev Tools Zoomcamp] Node.js test runner hangs when testing Socket.io and Express integration
I maintainer di solito rispondono entro 3 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 85/100
- Tipo di issue
- Documentazione
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- express, javascript, node.js
- Ambito
- backend, documentation, testing-qa
Direzione di ricerca
Inizia esaminando le modifiche proposte nell’issue per server/index.js, tests/integration.test.js e package.json. Verifica che la guida documentata includa l’avvio protetto del server, la pulizia di Socket.io e del server HTTP e il comando di test; il lavoro è completato quando le FAQ spiegano chiaramente come evitare il blocco o l’errore ERR_SERVER_ALREADY_LISTEN.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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" }
- Lingua principale
- Python
- Stelle
- 7
- Fork
- 19
- Merge medio
- 3g 20h
- PR unite (30g)
- 9
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di DataTalksClub/faq
-
faq-proposal
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
DataTalksClub/faq#417 · 1 commento ·
I maintainer di solito rispondono entro 3 giorni
-
faq-proposal
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
DataTalksClub/faq#415 · 1 commento ·
I maintainer di solito rispondono entro 3 giorni
-
faq-proposal
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
DataTalksClub/faq#413 · 1 commento ·
I maintainer di solito rispondono entro 3 giorni
-
faq-proposal
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
DataTalksClub/faq#411 · 1 commento ·
I maintainer di solito rispondono entro 3 giorni
-
[FAQ]Apertafaq-proposal
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
DataTalksClub/faq#409 · 1 commento ·
I maintainer di solito rispondono entro 3 giorni
Tutte le issue di DataTalksClub/faq
Issue simili
-
[Bug] @deck.gl/arcgis dist import resolves to unpublished @deck.gl/core source path (9.3.11, 9.4.0)Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
workflow: a tick's dispatch counts as 'only this step', and no review self-grants a round unattendedApertaworkflow
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
kristofdegrave/homeassistant-smart-charging#1505 ·
I maintainer di solito rispondono entro 1 giorno
-
New Submission: TropWATERApertametadata submission
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
canonical/content-cache-operator#163 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[submission]Apertasubmission
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 65/100
leanprover/lean-eval-submissions#1852 ·
I maintainer di solito rispondono entro 1 giorno