يعتمد كلا من Cloud Firestore و Realtime Database على لغات قواعد قوية وموجزة تم إنشاؤها خصيصًا للتحكم في أمان المعلومات والتحكم في الوصول. ومع ذلك ، نظرًا لأن القواعد تصبح أطول وأكثر تعقيدًا ، فقد تحتاج إلى بعض المساعدة في تصحيح الأخطاء في سلوكها.
تتضمن محاكيات Firebase القدرة على إنشاء تقارير تغطية القواعد ، حتى تتمكن من رؤية ما تم تقييمه بالضبط لكل تعبير فرعي عند إعادة إنتاج خطأ. توفر التقارير أيضًا معلومات حول مدى تكرار استخدام كل حالة اختبار لقاعدة ، مثل تقنيات "تغطية الخط" التقليدية.
قم بإنشاء تقرير
بعد إجراء مجموعة من الاختبارات ، يمكنك الوصول إلى تقارير التغطية الاختبارية التي توضح كيفية تقييم كل قاعدة من قواعد الأمان الخاصة بك.
للحصول على التقارير ، استعلم عن نقطة نهاية مكشوفة على المحاكي أثناء تشغيله. للحصول على إصدار متوافق مع المتصفح ، استخدم عنوان URL التالي:
سحابة Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
قاعدة بيانات الوقت الفعلي
http://localhost:9000/.inspect/coverage?ns=<database_name>
يؤدي هذا إلى تقسيم القواعد إلى تعبيرات وتعبيرات فرعية يمكنك تمرير الماوس فوقها للحصول على مزيد من المعلومات ، بما في ذلك عدد التقييمات والقيم التي تم إرجاعها. للحصول على نسخة JSON الأولية من هذه البيانات ، قم بتضمين عنوان URL التالي في استعلامك:
سحابة Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
قاعدة بيانات الوقت الفعلي
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
قواعد المثال التصحيح
لإنشاء تقرير اختبار بسهولة ، استخدم برنامج Quickstarts للمحاكي المتاح على GitHub لـ Cloud Firestore و Realtime Database . ترشدك هذه الخطوات السريعة من خلال التثبيت والتهيئة الصحيحة للمحاكيات ، ثم إنشاء اختبارات عينة من مجموعة أمثلة من القواعد.
ضع في اعتبارك تطبيقًا نموذجيًا يستخدم Cloud Firestore يحسب عدد المرات التي ينقر فيها المستخدمون على زر. يستخدم التطبيق القواعد التالية:
سحابة Firestore
service cloud.firestore { match /databases/{database}/documents { match /counters/{counter} { allow read; allow write: if request.resource.data.value == resource.data.value +1; } } }
لتصحيح الأخطاء في القواعد الموضحة أعلاه ، استخدم نموذج اختبار JavaScript التالي:
const counter0 = db.collection("counters").doc("0");
await firebase.assertSucceeds(counter0.set({value: 0}));
ينشئ المحاكي تقريرًا متاحًا على عنوان URL المذكور أعلاه:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
يعرض التقرير أخطاء القيمة الخالية وغير المعرفة التالية:
تكمن المشكلة في هذا المثال المحدد في أن القواعد لا تفرق بين إنشاء المستند وتحديث المستند. وبالتالي ، لا يُسمح بالكتابة إذا لم يكن المستند موجودًا ، ولا يمكن إنشاء المستند لأنه غير موجود. إن التفريق بين "الكتابة" في عمليتين أكثر تحديدًا - "إنشاء" و "تحديث" - يحل المشكلة.
سحابة Firestore
service cloud.firestore { match /databases/{database}/documents { match /counters/{counter} { allow read; allow create: if request.resource.data.value == 0; allow update: if request.resource.data.value == resource.data.value +1; } } }
يُظهر التقرير الذي تم إنشاؤه مدى تكرار استخدام كل قاعدة وما تم إرجاعه.