Generuj raporty z testów

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

Emulatory Firebase umożliwiają generowanie raportów zasięgu reguł, dzięki czemu można dokładnie zobaczyć, do czego odnosi się każde podwyrażenie po odtworzeniu błędu. Raporty dostarczają także informacji o tym, jak często w każdym przypadku testowym stosowana była reguła, podobnie jak w przypadku tradycyjnych technik „pokrycia linii”.

Wygeneruj raport

Po przeprowadzeniu zestawu testów możesz uzyskać dostęp do raportów zasięgu testów, które pokazują, jak została oceniona każda z Twoich reguł bezpieczeństwa.

Aby uzyskać raporty, wykonaj zapytanie do odsłoniętego punktu końcowego w emulatorze, gdy jest on uruchomiony. Aby uzyskać wersję przyjazną dla przeglądarki, użyj następującego adresu URL:

Chmura 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 podwyrażenia, na które można najechać myszką, aby uzyskać więcej informacji, w tym liczbę ocen i zwróconych wartości. Aby uzyskać surową wersję tych danych w formacie JSON, w zapytaniu umieść następujący adres URL:

Chmura 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 Szybki start dotyczących emulatora dostępnych w GitHub dla Cloud Firestore i Realtime Database . Te przewodniki Szybki start przeprowadzą Cię przez prawidłową instalację i inicjalizację emulatorów, a następnie wygenerowanie przykładowych testów na podstawie przykładowego zestawu reguł.

Rozważmy 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:

Chmura 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 adresem URL podanym powyżej:

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

Raport pokazuje następujące niezdefiniowane błędy o wartości zerowej:

Problem z tym konkretnym przykładem polega na tym, że reguły nie rozróżniają między tworzeniem dokumentu a jego aktualizacją. W związku z tym zapis nie jest dozwolony, jeśli dokument nie istnieje, a dokumentu nie można utworzyć, ponieważ nie istnieje. Rozróżnienie „zapisu” na dwie bardziej szczegółowe operacje — „utwórz” i „aktualizację” — rozwiązuje problem.

Chmura 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 dana reguła była używana i co zostało zwrócone.