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

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

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