تكرار السؤال: …
الإجابة المختصرة
باستخدام دوال التلاعب بالزمن المدمجة مثل $this->travel(5)->days() أو $this->freezeTime() واختبار انتهاء الصلاحيات بدقة متناهية.
الشرح
إذا كنت تختبر ميزة حظر الحساب لمدة 24 ساعة أو انتهاء اشتراك، لا يمكنك جعل الاختبار ينتظر وقتاً حقيقياً. تتيح ميزة Time Traveling في Laravel (المبنية فوق مكتبة Carbon) تجميد التوقيت، أو القفز للأمام بالساعات والأيام travelTo(now()->addDays(30))، والتحقق من أن النظام يلغي الصلاحيات بدقة ثم إعادة الوقت لطبيعته بـ travelBack().
مثال بالكود
$this->freezeTime();
$user->ban(hours: 2);
$this->travel(3)->hours();
$this->assertTrue($user->fresh()->isBanExpired());
$this->travelBack();أخطاء شائعة
- نسيان استدعاء $this->travelBack() في نهاية الاختبار مما قد يؤثر على توقيت الاختبارات اللاحقة.