Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Testberichte erstellen

Cloud Firestore und Realtime Database verlassen sich beide auf leistungsstarke, prägnante Regelsprachen, die speziell für die Verwaltung von Informationssicherheit und Zugriffskontrolle entwickelt wurden. Da die Regeln jedoch länger und komplexer werden, benötigen Sie möglicherweise etwas Hilfe beim Debuggen von Fehlern in ihrem Verhalten.

Die Firebase-Emulatoren bieten die Möglichkeit, Regelabdeckungsberichte zu generieren, sodass Sie genau sehen können, was jeder Unterausdruck bei der Reproduktion eines Fehlers ausgewertet hat. Die Berichte enthalten auch Informationen darüber, wie oft jeder Testfall eine Regel verwendet hat, wie herkömmliche Techniken der "Line Coverage".

Bericht erstellen

Nachdem Sie eine Reihe von Tests ausgeführt haben, können Sie auf Testabdeckungsberichte zugreifen, die zeigen, wie jede Ihrer Sicherheitsregeln bewertet wurde.

Um die Berichte abzurufen, fragen Sie einen verfügbar gemachten Endpunkt auf dem 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
 

Echtzeit-Datenbank

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

Dadurch werden Ihre Regeln in Ausdrücke und Unterausdrücke unterteilt, über die Sie mit der Maus bewegen können, um weitere Informationen zu erhalten, einschließlich der Anzahl der zurückgegebenen Auswertungen und 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
 

Echtzeit-Datenbank

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

Debugging-Beispielregeln

Um leicht einen Prüfbericht zu erzeugen, verwenden Sie den Emulator auf GitHub zur Verfügung Quickstart Wolke Firestor und Echtzeit - Datenbank . Diese Schnellstartanleitungen führen Sie durch die ordnungsgemäße Installation und Initialisierung der Emulatoren und das anschließende Generieren von Beispieltests aus einem Beispielregelsatz.

Betrachten Sie eine Beispielanwendung mit Cloud Firestore, die zählt, wie oft Nutzer auf eine Schaltfläche klicken. Die App verwendet 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;
     }
   }
 }
 

Um die Fehler in den oben gezeigten Regeln zu debuggen, verwenden Sie den folgenden JavaScript-Beispieltest:

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

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

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

Der Bericht zeigt die folgenden undefinierten und Nullwertfehler:

Das Problem bei diesem speziellen Beispiel besteht darin, dass die Regeln nicht zwischen dem Erstellen des Dokuments und dem Aktualisieren des Dokuments unterscheiden. Folglich ist das Schreiben nicht zulässig, wenn das Dokument nicht existiert, und das Dokument kann nicht erstellt werden, weil es nicht existiert. Das Unterteilen des "Schreibens" in zwei spezifischere Operationen - "Erstellen" 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, wie oft jede Regel verwendet wurde und was zurückgegeben wurde.