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

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

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

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

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

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

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

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

क्लाउड फायरस्टोर का उपयोग करने वाले एक उदाहरण ऐप पर विचार करें जो यह गिनता है कि उपयोगकर्ता कितनी बार एक बटन पर क्लिक करते हैं। ऐप निम्नलिखित नियमों को नियोजित करता है:

क्लाउड फायरस्टोर

 service cloud.firestore {
   match /databases/{database}/documents {
     match /counters/{counter} {
       allow read;
       allow write: if request.resource.data.value == resource.data.value +1;
     }
   }
 }
 

ऊपर दिखाए गए नियमों में त्रुटियों को डीबग करने के लिए, निम्नलिखित नमूना जावास्क्रिप्ट परीक्षण का उपयोग करें:

const counter0 = db.collection("counters").doc("0");
await firebase.assertSucceeds(counter0.set({value: 0}));

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

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

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