توليد تقارير الاختبار

يعتمد كل من Cloud Firestore وRealtime Database على لغات قواعد قوية وموجزة تم إنشاؤها خصيصًا للتحكم في أمن المعلومات والتحكم في الوصول. ومع ذلك، عندما تصبح القواعد أطول وأكثر تعقيدًا، قد تحتاج إلى بعض المساعدة في تصحيح الأخطاء في سلوكها.

تتضمن محاكيات Firebase القدرة على إنشاء تقارير تغطية القاعدة، حتى تتمكن من معرفة بالضبط ما يتم تقييمه لكل تعبير فرعي عند إعادة إنتاج خطأ. توفر التقارير أيضًا معلومات حول مدى تكرار استخدام كل حالة اختبار لقاعدة، مثل تقنيات "تغطية الخط" التقليدية.

إنشاء تقرير

بعد تشغيل مجموعة من الاختبارات، يمكنك الوصول إلى تقارير تغطية الاختبار التي توضح كيفية تقييم كل قاعدة من قواعد الأمان الخاصة بك.

للحصول على التقارير، قم بالاستعلام عن نقطة النهاية المكشوفة على المحاكي أثناء تشغيله. للحصول على نسخة سهلة الاستخدام للمتصفح، استخدم عنوان URL التالي:

سحابة فايرستور

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
 

قاعدة بيانات الوقت الحقيقي

http://localhost:9000/.inspect/coverage?ns=<database_name>
 

يؤدي ذلك إلى تقسيم القواعد إلى تعبيرات وتعبيرات فرعية يمكنك تمريرها بالماوس للحصول على مزيد من المعلومات، بما في ذلك عدد التقييمات والقيم التي يتم إرجاعها. بالنسبة لإصدار JSON الأولي من هذه البيانات، قم بتضمين عنوان URL التالي في استعلامك:

سحابة فايرستور

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
 

قاعدة بيانات الوقت الحقيقي

http://localhost:9000/.inspect/coverage.json?ns=<database_name>
 

تصحيح قواعد المثال

لإنشاء تقرير اختبار بسهولة، استخدم التشغيل السريع للمحاكي المتوفر على GitHub لـ Cloud Firestore و Realtime Database . ترشدك عمليات البدء السريعة هذه خلال عملية تثبيت المحاكيات وتهيئتها بشكل صحيح، ثم إنشاء نماذج اختبارات من مجموعة أمثلة للقواعد.

فكر في تطبيق مثال يستخدم 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

يعرض التقرير الأخطاء التالية غير المحددة والقيمة الخالية:

المشكلة في هذا المثال المحدد هي أن القواعد لا تفرق بين إنشاء المستند وتحديثه. وبالتالي، لا يُسمح بالكتابة إذا لم يكن المستند موجودًا، ولا يمكن إنشاء المستند لأنه غير موجود. إن التمييز بين "الكتابة" إلى عمليتين أكثر تحديدًا - "الإنشاء" و"التحديث" - يحل المشكلة.

سحابة فايرستور

 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;
     }
   }
 }
 

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