تكرار السؤال: …
الإجابة المختصرة
أسبابها هي الاعتماد على توقيتات غير مضمونة (Timeouts عشوائية)، أو ترتيب الاختبارات، أو الوقت الحالي للنظام، أو بقايا بيانات سابقة، وتعالج بتجميد الوقت وتنظيف البيئة.
الشرح
الاختبار المتقلب هو اختبار ينجح تارة ويفشل تارة أخرى لنفس الكود. للقضاء عليها: 1) لا تستخدم setTimeout لانتظار أحداث غير متزامنة، بل استمع للأحداث الحقيقية، 2) استخدم مكتبات تجميد الوقت (Mocking Timers) للتحكم في new Date()، 3) عزل قواعد البيانات وتوليد معرفات وبيانات مستقلة لكل اختبار على حدة.
مثال بالكود
// استخدام mock timers الأصلية في node:test
test.mock.timers.enable();
test.mock.timers.tick(5000);أخطاء شائعة
- وضع setTimeout(..., 2000) في الاختبار بافتراض أن العملية ستنتهي حتماً في ثانيتين، وهو ما يفشل على خوادم الـ CI البطيئة.