Cloud Firestore और Realtime Database, दोनों ही जानकारी की सुरक्षा और ऐक्सेस कंट्रोल के लिए, खास तौर पर बनाई गई, सटीक और असरदार नियमों की भाषाओं पर काम करते हैं. हालांकि, नियम ज़्यादा लंबे और जटिल होने पर, आपको उनके व्यवहार में मौजूद गड़बड़ियों को डीबग करने में मदद की ज़रूरत पड़ सकती है.
Firebase Emulators में, नियमों की कवरेज रिपोर्ट जनरेट करने की सुविधा शामिल होती है. इससे, गड़बड़ी को फिर से बनाने पर, यह देखा जा सकता है कि हर सब-एक्सप्रेशन का आकलन किस तरह किया गया. इन रिपोर्ट में, यह जानकारी भी मिलती है कि हर टेस्ट केस में किसी नियम का इस्तेमाल कितनी बार किया गया. जैसे, "लाइन कवरेज" की पारंपरिक तकनीकों में किया जाता है.
रिपोर्ट जनरेट करो
टेस्ट का सुइट चलाने के बाद, टेस्ट कवरेज रिपोर्ट ऐक्सेस की जा सकती हैं. इनमें यह दिखाया जाता है कि आपके हर सुरक्षा नियम का आकलन कैसे किया गया.
रिपोर्ट पाने के लिए, एम्युलेटर के चालू होने के दौरान, उस पर मौजूद किसी एंडपॉइंट के लिए क्वेरी करें. ब्राउज़र के साथ काम करने वाले वर्शन के लिए, यह यूआरएल इस्तेमाल करें:
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>
उदाहरण के तौर पर बनाए गए नियमों को डीबग करना
टेस्ट रिपोर्ट आसानी से जनरेट करने के लिए, 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}));
एम्युलेटर, ऊपर बताए गए यूआरएल पर उपलब्ध एक रिपोर्ट जनरेट करता है:
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; } } }
जनरेट की गई रिपोर्ट में, यह दिखाया जाता है कि हर नियम का इस्तेमाल कितनी बार किया गया और क्या दिखाया गया.
