Testberichte erstellen

Cloud Firestore und Realtime Database nutzen beide leistungsstarke, prägnante Regelsprachen. die speziell für die Informationssicherheit und die Zugriffssteuerung entwickelt wurden. Wenn Regeln jedoch länger und komplexer werden, benötigen Sie möglicherweise Hilfe bei der Fehlerbehebung.

Mit den Firebase-Emulatoren können Sie Berichte zur Regelabdeckung generieren, kann genau sehen, was jeder Unterausdruck ausgewertet hat, wenn Sie Fehler. Die Berichte enthalten auch Informationen darüber, wie häufig jeder Test durchgeführt wird. eine Regel wie die herkömmliche "Linienabdeckung", zu entwickeln.

Bericht generieren

Nachdem Sie eine Reihe von Tests ausgeführt haben, können Sie auf Berichte zur Testabdeckung zugreifen, die Aufschluss darüber geben, wie die einzelnen Sicherheitsregeln bewertet wurden.

Um die Berichte abzurufen, fragen Sie einen bereitgestellten Endpunkt im Emulator ab, während er ausgeführt wird. Verwenden Sie für eine browserfreundliche Version die folgende URL:

Cloud Firestore

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

Realtime Database

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

Dadurch werden Ihre Regeln in Ausdrücke und Teilausdrücke aufgeteilt. Bewegen Sie die Maus auf einen Ausdruck oder Teilausdruck, um weitere Informationen zu erhalten, einschließlich der Anzahl der Bewertungen und der zurückgegebenen Werte. Fügen Sie für die JSON-Rohversion dieser Daten die folgende URL in Ihre Abfrage ein:

Cloud Firestore

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

Realtime Database

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

Fehler in Beispielregeln beheben

Mit den Emulator-Schnellstarts auf GitHub für Cloud Firestore und Realtime Database Diese Kurzanleitungen führen Sie durch die ordnungsgemäße Installation die Emulatoren initialisieren und dann Beispieltests aus einem Beispiel einen Regelsatz.

Beispiel-App mit Cloud Firestore, die zählt, wie oft Nutzer auf eine Schaltfläche klicken. Für die Anwendung gelten die folgenden Regeln:

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

Verwenden Sie das folgende Beispiel, um die Fehler in den oben gezeigten Regeln zu beheben JavaScript-Test:

const counter0 = db.collection("counters").doc("0");
await firebase.assertSucceeds(counter0.set({value: 0}));

Der Emulator erstellt einen Bericht, der unter der oben angegebenen URL verfügbar ist:

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

Der Bericht enthält die folgenden nicht definierten Fehler und Fehler mit Nullwerten:

Das Problem bei diesem Beispiel ist, dass die Regeln nicht zwischen zwischen dem Erstellen und dem Aktualisieren des Dokuments. Folglich ist das Schreiben ist nicht zulässig, wenn das Dokument nicht vorhanden ist und das Dokument nicht weil er nicht existiert. „Write“ unterscheiden in zwei spezifischere Vorgänge — „create“ und „Aktualisieren“ – löst das Problem.

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

Der generierte Bericht zeigt an, wie oft jede Regel verwendet wurde und was zurückgegeben.