Catch up on highlights from Firebase at Google I/O 2023. Learn more

Generuj raporty z testów

Cloud Firestore i Realtime Database opierają się na potężnych, zwięzłych językach reguł stworzonych specjalnie do zarządzania bezpieczeństwem informacji i kontrolą dostępu. Jednak w miarę jak reguły stają się dłuższe i bardziej złożone, możesz potrzebować pomocy w debugowaniu błędów w ich zachowaniu.

Emulatory Firebase obejmują możliwość generowania raportów pokrycia reguł, dzięki czemu można dokładnie zobaczyć, do czego zostało ocenione każde podwyrażenie podczas odtwarzania błędu. Raporty dostarczają również informacji o tym, jak często każdy przypadek testowy używał reguły, podobnie jak tradycyjne techniki „pokrycia linii”.

Wygeneruj raport

Po przeprowadzeniu zestawu testów możesz uzyskać dostęp do raportów pokrycia testów, które pokazują, jak oceniono każdą z reguł bezpieczeństwa.

Aby uzyskać raporty, wyślij zapytanie do uwidocznionego punktu końcowego w emulatorze, gdy jest on uruchomiony. Aby uzyskać wersję przyjazną dla przeglądarki, użyj następującego adresu URL:

Cloud Firestore

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

Baza danych czasu rzeczywistego

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

Spowoduje to rozbicie reguł na wyrażenia i wyrażenia podrzędne, na które można najechać kursorem myszy, aby uzyskać więcej informacji, w tym liczbę ocen i zwróconych wartości. Aby uzyskać nieprzetworzoną wersję tych danych w formacie JSON, w zapytaniu uwzględnij następujący adres URL:

Cloud Firestore

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

Baza danych czasu rzeczywistego

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

Debugowanie przykładowych reguł

Aby łatwo wygenerować raport z testu, skorzystaj z przewodników szybkiego startu dla emulatora dostępnych w GitHub dla Cloud Firestore i Realtime Database . Te przewodniki Szybki Start przeprowadzą Cię przez proces prawidłowego instalowania i inicjowania emulatorów, a następnie generowania przykładowych testów z przykładowego zestawu reguł.

Rozważ przykładową aplikację korzystającą z Cloud Firestore, która zlicza, ile razy użytkownicy kliknęli przycisk. W aplikacji obowiązują następujące zasady:

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

Aby debugować błędy w regułach pokazanych powyżej, użyj następującego przykładowego testu JavaScript:

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

Emulator generuje raport dostępny pod wskazanym powyżej adresem URL:

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

Raport zawiera następujące niezdefiniowane błędy i błędy o wartości pustej:

Problem z tym konkretnym przykładem polega na tym, że reguły nie rozróżniają tworzenia dokumentu i aktualizowania dokumentu. W związku z tym zapis nie jest dozwolony, jeśli dokument nie istnieje, a dokument nie może zostać utworzony, ponieważ nie istnieje. Rozróżnienie „zapisu” na dwie bardziej szczegółowe operacje — „tworzenie” i „aktualizacja” — rozwiązuje 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;
     }
   }
 }
 

Wygenerowany raport pokazuje, jak często była używana każda reguła i co zostało zwrócone.