टेस्ट रिपोर्ट जनरेट करना

Cloud Firestore और Realtime Database, दोनों ही आसान और कम शब्दों वाले नियमों पर निर्भर हैं को खास तौर पर, जानकारी की सुरक्षा और ऐक्सेस कंट्रोल को कंट्रोल करने के लिए बनाया गया है. हालांकि, नियम लंबे और जटिल होते जा रहे हैं. इसलिए, गड़बड़ियों को डीबग करने में आपको कुछ मदद की ज़रूरत पड़ सकती है और उनके व्यवहार में फ़र्क़ होता है.

Firebase एम्युलेटर में नियम कवरेज रिपोर्ट जनरेट करने की सुविधा शामिल है. इससे आपको देख सकते हैं कि असल में हर सब-एक्सप्रेशन का आकलन करने के बाद क्या होता है कोई गड़बड़ी हुई है. इन रिपोर्ट से यह जानकारी भी मिलती है कि हर टेस्ट केस में, किसी नियम का कितनी बार इस्तेमाल किया गया. जैसे, "लाइन कवरेज" की पारंपरिक तकनीकें.

रिपोर्ट जनरेट करना

टेस्ट का सुइट चलाने के बाद, टेस्ट को ऐक्सेस किया जा सकता है कवरेज रिपोर्ट से पता चलता है कि सुरक्षा के आपके हर नियम का आकलन कैसे किया गया.

रिपोर्ट पाने के लिए, एमुलेटर के चलने के दौरान, किसी एक्सपोज़ किए गए एंडपॉइंट से क्वेरी करें. ब्राउज़र-फ़्रेंडली वर्शन के लिए, इस यूआरएल का इस्तेमाल करें:

Cloud Firestore

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

Realtime Database

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

इससे आपके नियम, एक्सप्रेशन और सब-एक्सप्रेशन में बंट जाते हैं. आकलन और मानों की संख्या सहित ज़्यादा जानकारी के लिए माउसओवर वापस किया गया. इस डेटा के रॉ JSON वर्शन के लिए, यह यूआरएल शामिल करें आपकी क्वेरी में:

Cloud Firestore

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

Realtime Database

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

डीबग करने के उदाहरण के नियम

आसानी से टेस्ट रिपोर्ट जनरेट करने के लिए, एम्युलेटर पर उपलब्ध एम्युलेटर क्विकस्टार्ट का इस्तेमाल करें Cloud Firestore और Realtime Database के लिए GitHub. ये शुरुआती निर्देश, एमुलेटर को सही तरीके से इंस्टॉल करने और शुरू करने के बारे में बताते हैं. इसके बाद, नियमों के उदाहरण के सेट से सैंपल टेस्ट जनरेट करने के बारे में बताते हैं.

उदाहरण के लिए, 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}));

एम्युलेटर, ऊपर बताए गए यूआरएल पर उपलब्ध एक रिपोर्ट जनरेट करता है:

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

जनरेट की गई रिपोर्ट से पता चलता है कि हर नियम का कितनी बार इस्तेमाल किया गया और वापस किया गया.