Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

สร้างรายงานการทดสอบ

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

Cloud Firestore และ Realtime Database ต่างก็ใช้ภาษากฎที่มีประสิทธิภาพและรัดกุมซึ่งสร้างขึ้นโดยเฉพาะเพื่อควบคุมความปลอดภัยของข้อมูลและการควบคุมการเข้าถึง อย่างไรก็ตาม เนื่องจากกฎมีความยาวและซับซ้อนมากขึ้น คุณอาจต้องการความช่วยเหลือในการแก้ไขข้อผิดพลาดในการทำงาน

Firebase Emulators รวมความสามารถในการสร้างรายงานความครอบคลุมของกฎ ดังนั้นคุณจึงสามารถเห็นได้อย่างชัดเจนว่าแต่ละนิพจน์ย่อยได้รับการประเมินเมื่อคุณสร้างข้อผิดพลาดซ้ำ รายงานยังให้ข้อมูลว่าแต่ละกรณีทดสอบใช้กฎบ่อยเพียงใด เช่น เทคนิค "การครอบคลุมบรรทัด" แบบดั้งเดิม

สร้างรายงาน

หลังจากเรียกใช้ชุดการทดสอบ คุณสามารถเข้าถึงรายงานความครอบคลุมการทดสอบที่แสดงการประเมินกฎความปลอดภัยแต่ละข้อของคุณ

หากต้องการรับรายงาน ให้สอบถามจุดสิ้นสุดที่เปิดเผยบนโปรแกรมจำลองในขณะที่กำลังทำงาน สำหรับเวอร์ชันที่เหมาะกับเบราว์เซอร์ ให้ใช้ URL ต่อไปนี้:

Cloud Firestore

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
 

ฐานข้อมูลเรียลไทม์

http://localhost:9000/.inspect/coverage?ns=<database_name>
 

ซึ่งจะแบ่งกฎของคุณออกเป็นนิพจน์และนิพจน์ย่อยที่คุณสามารถวางเมาส์เหนือเพื่อดูข้อมูลเพิ่มเติม รวมถึงจำนวนการประเมินและค่าที่ส่งคืน สำหรับข้อมูล JSON เวอร์ชันดิบ ให้ใส่ URL ต่อไปนี้ในข้อความค้นหาของคุณ:

Cloud Firestore

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
 

ฐานข้อมูลเรียลไทม์

http://localhost:9000/.inspect/coverage.json?ns=<database_name>
 

กฎตัวอย่างการดีบัก

หากต้องการสร้างรายงานทดสอบอย่างง่ายดาย ให้ใช้โปรแกรมจำลองการเริ่มต้นอย่างรวดเร็วบน GitHub สำหรับ Cloud Firestore และ ฐานข้อมูลเรียลไทม์ การเริ่มต้นอย่างรวดเร็วเหล่านี้จะแนะนำคุณตลอดการติดตั้งและเริ่มต้นโปรแกรมจำลองอย่างถูกต้อง จากนั้นจึงสร้างการทดสอบตัวอย่างจากชุดกฎตัวอย่าง

พิจารณาแอปตัวอย่างที่ใช้ 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}));

โปรแกรมจำลองสร้างรายงานที่ URL ที่ระบุไว้ด้านบน:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

รายงานแสดงข้อผิดพลาดที่ไม่ได้กำหนดและค่า Null ต่อไปนี้:

ปัญหาที่เกิดขึ้นกับตัวอย่างเฉพาะนี้คือกฎไม่ได้แยกความแตกต่างระหว่างการสร้างเอกสารและการอัปเดตเอกสาร ดังนั้น การเขียนไม่ได้รับอนุญาตหากไม่มีเอกสาร และไม่สามารถสร้างเอกสารได้เนื่องจากไม่มีอยู่ การแยก "เขียน" ออกเป็นสองการดำเนินการเฉพาะเพิ่มเติม - "สร้าง" และ "อัปเดต" ช่วยแก้ปัญหาได้

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

รายงานที่สร้างขึ้นจะแสดงความถี่ในการใช้กฎแต่ละข้อและสิ่งที่ส่งคืน