يعتمد كل من Cloud Firestore وRealtime Database على لغتَي القواعد الفعّالة والموجزة. أُنشئت خصيصًا للتحكم في أمان المعلومات والتحكم في الوصول إليها. ومع ذلك، لأنّ القواعد تصبح أطول وأكثر تعقيدًا، قد تحتاج إلى بعض المساعدة في تصحيح الأخطاء في سلوكهم.
تتضمّن محاكيات Firebase إمكانية إنشاء تقارير تغطية القواعد، حتى تتمكّن من معرفة القيمة التي تم تقييم كل تعبير فرعي بها عند إعادة تكرار خطأ. توفر التقارير أيضًا معلومات عن مدى تكرار كل اختبار. حالة استخدام قاعدة، مثل "التغطية الخطية" التقليدية والتقنيات المختلفة.
إنشاء تقرير
بعد إجراء مجموعة من الاختبارات، يمكنك الوصول إلى تقارير اختبار التغطية التي توضّح كيفية تقييم كل قاعدة من قواعد الأمان.
للحصول على التقارير، يمكنك الاستعلام عن نقطة نهاية مكشوفة على المحاكي أثناء إنه قيد التشغيل. للحصول على إصدار متوافق مع المتصفح، استخدِم عنوان URL التالي:
Cloud Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
Realtime Database
http://localhost:9000/.inspect/coverage?ns=<database_name>
يقسِّم هذا القواعد إلى تعبيرات وتعبيرات فرعية يمكنك تمرير الماوس لمزيد من المعلومات، بما في ذلك عدد التقييمات والقيم عاد. في ما يتعلّق بإصدار JSON الأولي من هذه البيانات، أدرِج عنوان URL التالي. في استعلامك:
Cloud Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
Realtime Database
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
تصحيح أخطاء القواعد النموذجية
لإنشاء تقرير اختبار بسهولة، استخدم خطوات البدء السريعة للمحاكي المتوفرة على GitHub للنطاقَين Cloud Firestore وRealtime Database ترشدك هذه الخطوات السريعة إلى كيفية تثبيت المحاكيات وإعدادها بشكلٍ صحيح، ثم إنشاء نماذج اختبارات من مثال على مجموعة من القواعد.
إليك مثالاً على تطبيق يستخدم Cloud Firestore ويحتسب عدد مرات المستخدمين. انقر على الزر. يستخدم التطبيق القواعد التالية:
Cloud 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
يعرض التقرير الأخطاء التالية المتعلقة بالقيمة الخالية وغير المحدّدة:
تكمن المشكلة في هذا المثال المحدّد في أنّ القواعد لا تميّز بين إنشاء المستند وتعديله. وبالتالي، غير مسموح بالكتابة إذا لم يكن المستند موجودًا، ولا يمكن تم إنشاؤها لأنها غير موجودة. التفريق بين "الكتابة" إلى اثنين عمليات أكثر تحديدًا — "إنشاء" و"تحديث" — يحل المشكلة.
Cloud 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; } } }
يعرض التقرير الذي تم إنشاؤه عدد مرات استخدام كل قاعدة وما تم استخدامه عاد.