Cloud Firestore و Realtime Database هر دو به زبانهای قواعد قدرتمند و مختصری متکی هستند که بهطور خاص برای مدیریت امنیت اطلاعات و کنترل دسترسی ایجاد شدهاند. با این حال، با طولانیتر و پیچیدهتر شدن قواعد، ممکن است برای اشکالزدایی خطاها در رفتار آنها به کمک نیاز داشته باشید.
شبیهسازهای Firebase شامل قابلیتی برای تولید گزارشهای پوشش قواعد هستند، بنابراین میتوانید دقیقاً ببینید که هر زیرعبارت هنگام تولید مجدد یک خطا به چه چیزی ارزیابی شده است. این گزارشها همچنین اطلاعاتی در مورد اینکه هر مورد آزمایشی چند بار از یک قاعده استفاده کرده است، مانند تکنیکهای سنتی "پوشش خط"، ارائه میدهند.
گزارش تهیه کنید
پس از اجرای مجموعهای از آزمایشها، میتوانید به گزارشهای پوشش آزمایش دسترسی داشته باشید که نشان میدهد هر یک از قوانین امنیتی شما چگونه ارزیابی شدهاند.
برای دریافت گزارشها، در حالی که شبیهساز در حال اجرا است، از یک نقطه پایانیِ در معرض دید، کوئری بگیرید. برای نسخهای که با مرورگر سازگار باشد، از URL زیر استفاده کنید:
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; } } }
برای اشکالزدایی خطاهای موجود در قوانین نشان داده شده در بالا، از نمونه تست جاوا اسکریپت زیر استفاده کنید:
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; } } }
گزارش تولید شده نشان میدهد که هر قانون چند بار استفاده شده و چه چیزی بازگردانده شده است.
