Catch up on highlights from Firebase at Google I/O 2023. Learn more

परीक्षण रिपोर्ट तैयार करें

Cloud Firestore और Realtime Database दोनों शक्तिशाली, संक्षिप्त नियम भाषाओं पर निर्भर करते हैं जो विशेष रूप से सूचना सुरक्षा और अभिगम नियंत्रण को नियंत्रित करने के लिए बनाई गई हैं। हालाँकि, जैसे-जैसे नियम लंबे और अधिक जटिल होते जाते हैं, आपको उनके व्यवहार में त्रुटियों को डीबग करने में कुछ सहायता की आवश्यकता हो सकती है।

फायरबेस एमुलेटर में नियम कवरेज रिपोर्ट उत्पन्न करने की क्षमता शामिल है, इसलिए जब आप किसी त्रुटि को पुन: उत्पन्न करते हैं तो आप देख सकते हैं कि प्रत्येक उप-अभिव्यक्ति का वास्तव में क्या मूल्यांकन किया गया है। रिपोर्टें इस बारे में भी जानकारी प्रदान करती हैं कि प्रत्येक परीक्षण मामले ने कितनी बार एक नियम का उपयोग किया, जैसे पारंपरिक "लाइन कवरेज" तकनीक।

एक रिपोर्ट तैयार करें

परीक्षणों का एक सूट चलाने के बाद, आप परीक्षण कवरेज रिपोर्ट तक पहुंच सकते हैं जो दिखाती है कि आपके प्रत्येक सुरक्षा नियम का मूल्यांकन कैसे किया गया था।

रिपोर्ट प्राप्त करने के लिए, एम्यूलेटर के चलने के दौरान एक खुला समापन बिंदु पूछें। ब्राउज़र-अनुकूल संस्करण के लिए, निम्न 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>
 

डिबगिंग उदाहरण नियम

आसानी से एक परीक्षण रिपोर्ट उत्पन्न करने के लिए, क्लाउड फायरस्टोर और रीयलटाइम डेटाबेस के लिए गिटहब पर उपलब्ध एमुलेटर क्विकस्टार्ट का उपयोग करें। ये क्विकस्टार्ट आपको एमुलेटर को ठीक से स्थापित करने और आरंभ करने के माध्यम से मार्गदर्शन करते हैं, फिर नियमों के एक उदाहरण सेट से नमूना परीक्षण उत्पन्न करते हैं।

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

जनरेट की गई रिपोर्ट दिखाती है कि प्रत्येक नियम का कितनी बार उपयोग किया गया और क्या लौटाया गया।