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 এবং Realtime Database জন্য গিটহাবে উপলব্ধ এমুলেটর কুইকস্টার্ট ব্যবহার করুন। এই কুইকস্টার্টগুলি আপনাকে সঠিকভাবে ইমুলেটরগুলি ইনস্টল এবং আরম্ভ করার জন্য গাইড করে, তারপর নিয়মের একটি উদাহরণ সেট থেকে নমুনা পরীক্ষা তৈরি করে।
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; } } }
উপরে দেখানো নিয়মে ত্রুটিগুলি ডিবাগ করতে, নিম্নলিখিত নমুনা জাভাস্ক্রিপ্ট পরীক্ষা ব্যবহার করুন:
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; } } }
তৈরি করা রিপোর্ট দেখায় যে প্রতিটি নিয়ম কত ঘন ঘন ব্যবহার করা হয়েছিল এবং কী ফেরত দেওয়া হয়েছিল।