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

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

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

สร้างรายงาน

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

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

Cloud Firestore

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

Realtime Database

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

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

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

หากต้องการแก้ไขข้อบกพร่องในกฎที่แสดงด้านบน ให้ใช้ตัวอย่างต่อไปนี้ การทดสอบ 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 ต่อไปนี้

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

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

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