Generowanie raportów z testów

Zarówno Cloud Firestore, jak i Realtime Database korzystają z zaawansowanych, zwięzłych języków reguł, które zostały stworzone specjalnie do zarządzania bezpieczeństwem informacji i kontrolą dostępu. Pamiętaj 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 umożliwiają generowanie raportów zasięgu reguł, może zobaczyć, co dokładnie ocenione zostało przez każde wyrażenie podrzędne podczas odtwarzania błąd. Raporty zawierają również informacje o częstotliwości każdego testu w przypadku użycia reguły, np. tradycyjnego „zasięgu linii” różnych technik.

Generowanie raportu

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

Aby uzyskać te raporty, wyślij w emulatorze zapytanie do ujawnionego punktu końcowego, podczas gdy jego uruchomienie. W przypadku wersji przeznaczonej do wyświetlania w przeglądarce użyj tego adresu URL:

Cloud Firestore

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

Realtime Database

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

Reguły są dzielone na wyrażenia i podwyrażenia, najechanie kursorem myszy, aby uzyskać więcej informacji, w tym liczbę ocen i wartości . Aby uzyskać wersję tych danych w postaci nieprzetworzonego ciągu JSON, dodaj do zapytania ten adres URL:

Cloud Firestore

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

Realtime Database

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

Przykładowe reguły debugowania

Aby łatwo wygenerować raport testowy, skorzystaj z krótkich wprowadzeń do obsługi emulatora – znajdziesz na stronie GitHub dla domen Cloud Firestore i Realtime Database. Te krótkie wprowadzenia przeprowadzą Cię przez proces prawidłowej instalacji i zainicjowanie emulatorów, a następnie wygenerować przykładowe testy na podstawie przykładu. do zestawu reguł.

Weź pod uwagę przykładową aplikację używającą parametru Cloud Firestore, która zlicza, ile razy użytkownicy kliknij przycisk. W aplikacji stosowane są te reguły:

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 tego przykładowego testu JavaScript:

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

Emulator wygeneruje raport dostępny pod adresem URL podanym powyżej:

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

Raport pokazuje te błędy niezdefiniowane i błędy o wartości null:

Problem z tym konkretnym przykładem polega na tym, że reguły nie rozróżniają między utworzeniem dokumentu a aktualizacją. W związku z tym Jeśli dokument nie istnieje i nie można go zapisać, ponieważ on nie istnieje. Rozróżnianie „zapisu” na dwa bardziej szczegółowe operacje – „create” (utwórz), i „zaktualizuj” – 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 używano poszczególnych reguł i co zwracały.