產生測試報告

Cloud FirestoreRealtime Database都採用強大精簡的規則語言 專門建立,用於管理資安和存取權控管。不過 因為規則越長、越複雜,您可能需要協助偵錯 行為模式

Firebase 模擬器可讓您產生規則涵蓋範圍報表,因此: 就能看到重現問題時每個子運算式的確切評估值 發生錯誤。這些報表也會提供每次測試的頻率相關資訊 範例,像是傳統「涵蓋率」技巧

產生報表

執行一系列測試後 涵蓋範圍報告,其中顯示各項安全性規則的評估方式。

如要取得報表,請在模擬器執行期間查詢公開的端點。如果是適用於瀏覽器的版本,請使用下列網址:

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>
 

對範例規則偵錯

如要輕鬆產生測試報告,請使用 Cloud FirestoreRealtime Database 的 GitHub。 這些快速入門導覽課程會引導您正確安裝 並初始化模擬器,再依據範例產生範例測試 規則組合

假設有一個範例應用程式使用 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}));

模擬器會產生報表,可透過上方所述的網址存取:

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

產生的報表會顯示各項規則的使用頻率以及 。