اختبار الشيفرة غير المتزامنة وStreams
انتظار Futures والتحقق من تسلسلات الأحداث
اختبار الشيفرة غير المتزامنة وStreams درس مجاني في Dart Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Dart Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Dart Academy 4 دروس في المجموع.
تتطلب العمليات غير المتزامنة عناية
يعيد كثير من الكود الفعلي قيمة من نوع Future. وإذا نسي الاختبار الانتظار، فقد ينجح قبل انتهاء العمل فعليًا. ⏳
أعيدوا القيمة أو استخدموا await
ينتظر المشغّل عندما يكون جسم الاختبار async وتستخدمون await للعمل، أو عندما تعيدون Future مباشرة.
test('loads user', () async {
final u = await fetchUser();
expect(u.name, 'Ada');
});استخدموا expectLater مع Future
استخدموا expectLater عندما تكون القيمة المطابَقة نفسها من نوع Future، مثل التحقق من اكتمال Future بنتيجة معينة.
await expectLater(fetchValue(), completion(42));مطابق completion
ينجح مطابق completion عندما ينتهي Future بنجاح وتطابق قيمته المطابق الداخلي.
expectLater(load(), completion(isNotEmpty));توقّعوا الأخطاء غير المتزامنة
لتأكيد فشل Future، استخدموا expectLater مع throwsA حتى يتحقق الاختبار من طرح الخطأ الصحيح.
await expectLater(
risky(), throwsA(isA<StateError>()));ترسل Streams قيمًا متعددة
يرسل Stream سلسلة من الأحداث مع مرور الوقت. ويعني اختباره التحقق من السلسلة كاملة وبالترتيب.
مطابق emits
استخدموا emits لتأكيد القيمة التالية التي ينتجها stream، واستخدموا emitsInOrder لتأكيد تسلسل متوقع.
await expectLater(
counter, emitsInOrder([1, 2, 3]));أشيروا إلى النهاية
يتحقق مطابق emitsDone من إغلاق stream في الوقت المتوقع، ويكشف streams التي لا تنتهي أبدًا.
expectLater(ticks, emitsThrough(emitsDone));تُصدر Streams أخطاء أيضًا
ادمجوا المطابقات لتوقّع خطأ في stream باستخدام emitsError، والتحقق من وصول حالات الفشل كأحداث.
emitsInOrder([1, emitsError(isException)]);احذروا النجاحات الوهمية
من الأخطاء الشائعة نسيان await، مما ينهي الاختبار مبكرًا ويجعله ينجح بصمت. استخدموا await دائمًا أو أعيدوا العمل غير المتزامن.
المهلات تنقذكم
إذا توقف الكود غير المتزامن، يوقفه المشغّل. ويمكنكم ضبط مدة الانتظار باستخدام timeout في الاختبار البطيء.
test('slow', () async { /* ... */ },
timeout: Timeout(Duration(seconds: 5)));تحقق سريع
كيف تؤكدون أن stream يُصدر القيم 1 و2 و3 بالترتيب؟
مراجعة
استخدمتم await مع Futures، واستخدمتم expectLater مع completion و throwsA، واختبرتم streams باستخدام مطابقات emits. اختبارات غير متزامنة بثقة. 🌊
الأسئلة الشائعة
هل درس «اختبار الشيفرة غير المتزامنة وStreams» مجاني؟
نعم — نص درس «اختبار الشيفرة غير المتزامنة وStreams» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Dart Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Dart Academy 4 دروس في المجموع.
ماذا ستتعلم في «اختبار الشيفرة غير المتزامنة وStreams»؟
انتظار Futures والتحقق من تسلسلات الأحداث تتمرن على Dart Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Dart Academy؟
لا تُشترط خبرة سابقة. Dart Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «اختبار الشيفرة غير المتزامنة وStreams»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Dart Academy هذا؟
نعم. كل درس في Dart Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أول اختبار لكم مع test وexpect
- group وsetUp وtearDown
- اختبار الشيفرة غير المتزامنة وStreams
- Mocks وFakes والتغطية