إنشاء تقارير اختبارية

يعتمد كلّ من 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;
     }
   }
 }
 

يعرِض التقرير الذي تم إنشاؤه معدّل استخدام كلّ قاعدة والنتائج التي تم عرضها.