تكرار السؤال: …
الإجابة المختصرة
تنشئ حاويات Docker حقيقية مؤقتة لقواعد البيانات (مثل PostgreSQL أو Redis) مخصصة لدورة حياة الاختبار، مما يضمن بيئة اختبار مطابقة تماماً للإنتاج.
الشرح
بدلاً من استخدام قواعد بيانات مبسطة في الذاكرة (مثل SQLite التي تفتقر لميزات ومحددات PostgreSQL المتقدمة)، تقوم Testcontainers بتشغيل حاوية حقيقية وتطبيق الـ migrations عليها وإجراء الاختبارات ثم تدمير الحاوية بالكامل. هذا يقضي نهائياً على مشكلة 'it works on my machine'.
مثال بالكود
import { PostgreSqlContainer } from "@testcontainers/postgresql";
const container = await new PostgreSqlContainer().start();
const dbUri = container.getConnectionUri();
// إجراء الاختبارات ثم إيقاف الحاوية
await container.stop();أخطاء شائعة
- إعادة إنشاء حاوية Docker جديدة لكل اختبار فردي مما يرفع زمن تنفيذ الـ suite لعشرات الدقائق بدلاً من مشاركتها.