مثال على حالة اختبار
شاهد كيف نتحقق من استعلام متداخل معقد مع مرشحات علاقات
tests/e2e/postgres.test.ts
it('nested relation filter', () =>
runParityTest(
db,
benchmarkResults,
'findMany nested relation',
'Organization',
{
method: 'findMany',
where: {
projects: {
some: {
tasks: { some: { status: 'DONE' } }
}
}
}
},
() => db.prisma.organization.findMany({
where: {
projects: {
some: {
tasks: { some: { status: 'DONE' } }
}
}
},
orderBy: { id: 'asc' }
}),
)
)
// ما تفعله runParityTest داخليًا:
// 1. تستدعي generateSQL() بالوسائط
// 2. تنفّذ SQL المُولَّد مباشرة
// 3. تنفّذ استعلام Prisma
// 4. تطبّع النتيجتين
// 5. فحص مساواة عميق - يفشل عند أي اختلاف
// 6. تقيس زمن التنفيذ
ما الذي يحدث أثناء تنفيذ الاختبار
1توليد الاستعلام (ميكروثوانٍ)
تحلّل الدالة generateSQL() وسائط Prisma وتنشئ SQL ذا معاملات مربوطة. تُقاس هذه الخطوة بشكل منفصل لقياس عبء توليد الاستعلام.
2تنفيذ متوازٍ (ميلي ثانية)
يعمل الاستعلامان على نفس حالة قاعدة البيانات في الوقت نفسه باستخدام Promise.all()، ما يضمن مقارنة عادلة وظروف بيانات متطابقة.
3تطبيع عميق
تخضع النتائج لتطبيع تكراري: BigInt→Number، Decimal→Float(10)، Date→null، تحليل JSON، وفرز المفاتيح. يضمن ذلك دقة المقارنة بايت ببايت.
4مساواة صارمة
مقارنة عبر JSON stringify بدون أي تسامح. أي اختلاف في عدد الصفوف أو قيم الحقول أو الكائنات المتداخلة أو الترتيب يُفشل الاختبار مع مخرجات diff مفصّلة.
5قياس الأداء
بعد التحقق، تقيس 5-50 تكرارًا متوسط زمن التنفيذ. تشمل النتائج: Prisma v6 وPrisma v7 وPrisma v8 وDrizzle ORM وSQL المُولَّد وعبء توليد SQL.
تحقق متعدد الإصدارات
يعمل كل اختبار مشمول بالقياس على Prisma v6 وv7 وv8 حيثما كان ذلك مدعومًا:
Prisma v6 (6.19.3)
- استخدام PrismaClient مباشرة
- بنية المحرك القديمة
- مقاييس أداء مرجعية
Prisma v7 (7.10.0)
- بنية قائمة على adapters
- @prisma/adapter-pg و adapter-better-sqlite3
- تحسينات المحرك الجديدة
Prisma v8 (8.1.0-dev.1)
- تغطية إصدار التطوير من Prisma v8
- بنية قائمة على adapters
- تكافؤ قياس الأداء على PostgreSQL وSQLite