تكرار السؤال: …
الإجابة المختصرة
باستخدام دالة events.once مع الوعود لانتظار الأحداث المحددة، أو تحويل الـ Streams إلى مصفوفة تكرارية عبر for await...of.
الشرح
اختبار الـ EventEmitters عبر callbacks التقليدية يسبب أخطاء عدم انتهاء الاختبار إذا لم يُطلق الحدث. الحل المعياري هو استخدام events.once(emitter, 'eventName') التي ترجع كائن Promise يُحل مع أول إطلاق للحدث أو يُلغى بمؤقت زمني إذا لم يطلق في الوقت المحدد.
مثال بالكود
import { once } from "node:events";
emitter.emit("ready", { status: true });
const [payload] = await once(emitter, "ready");
assert.equal(payload.status, true);أخطاء شائعة
- عدم وضع timeout عند انتظار أحداث الـ stream مما يؤدي لتعليق مشغل الاختبارات للأبد عند فشل الحدث.