تكرار السؤال: …
الإجابة المختصرة
RefreshDatabase تطبق كل الـ migrations مرة واحدة وتعزل كل اختبار في معاملة ذرية تُلغى عند النهاية، بينما DatabaseTransactions تلف الاختبار في معاملة فقط وتتطلب قاعدة بيانات جاهزة مسبقاً.
الشرح
RefreshDatabase هي السمة القياسية الموصى بها؛ فهي تفحص ما إذا كانت الجداول قد تم ترحيلها، وتقوم بالترحيل الأولي مرة واحدة فقط في الذاكرة أو قاعدة الاختبار، ثم تبدأ معاملة (Transaction) قبل كل دالة اختبار وتقوم بعمل Rollback فوري عند نهايتها، مما يضمن بيئة اختبار نظيفة وحتمية وفائقة السرعة دون الحاجة لإعادة بناء الجداول في كل اختبار.
مثال بالكود
class UserTest extends TestCase {
use RefreshDatabase; // إعادة تعيين نظيفة لكل اختبار
}أخطاء شائعة
- استخدام DatabaseMigrations القديمة التي تعيد بناء وحذف كل الجداول مع كل دالة اختبار فردية مما يجعل تنفيذ الاختبارات بطيئاً جداً.