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; } } }
जनरेट की गई रिपोर्ट से पता चलता है कि हर नियम का कितनी बार इस्तेमाल किया गया और क्या वापस किया गया.