Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Genera rapporti di prova

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Cloud Firestore e Realtime Database si basano entrambi su linguaggi di regole potenti e concisi creati appositamente per governare la sicurezza delle informazioni e il controllo degli accessi. Tuttavia, man mano che le regole diventano più lunghe e complesse, potresti aver bisogno di aiuto per il debug degli errori nel loro comportamento.

Gli emulatori Firebase includono la possibilità di generare rapporti sulla copertura delle regole, in modo da poter vedere esattamente a cosa viene valutata ogni sottoespressione quando si riproduce un errore. I report forniscono anche informazioni sulla frequenza con cui ogni caso di test ha utilizzato una regola, come le tradizionali tecniche di "copertura della linea".

Genera un rapporto

Dopo aver eseguito una suite di test, puoi accedere ai rapporti sulla copertura dei test che mostrano come è stata valutata ciascuna delle tue regole di sicurezza.

Per ottenere i report, eseguire una query su un endpoint esposto nell'emulatore mentre è in esecuzione. Per una versione compatibile con il browser, utilizzare il seguente URL:

CloudFirestore

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

Database in tempo reale

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

In questo modo le regole vengono suddivise in espressioni e sottoespressioni su cui è possibile passare il mouse per ulteriori informazioni, incluso il numero di valutazioni e i valori restituiti. Per la versione JSON non elaborata di questi dati, includi il seguente URL nella query:

CloudFirestore

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

Database in tempo reale

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

Regole di esempio per il debug

Per generare facilmente un rapporto di prova, utilizza le guide rapide dell'emulatore disponibili su GitHub per Cloud Firestore e Realtime Database . Queste guide introduttive ti guidano attraverso l'installazione e l'inizializzazione corrette degli emulatori, quindi generano test di esempio da un set di regole di esempio.

Considera un'app di esempio che utilizza Cloud Firestore che conta quante volte gli utenti fanno clic su un pulsante. L'app utilizza le seguenti regole:

CloudFirestore

 service cloud.firestore {
   match /databases/{database}/documents {
     match /counters/{counter} {
       allow read;
       allow write: if request.resource.data.value == resource.data.value +1;
     }
   }
 }
 

Per eseguire il debug degli errori nelle regole mostrate sopra, utilizza il seguente test JavaScript di esempio:

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

L'emulatore genera un report disponibile all'URL sopra indicato:

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

Il report mostra i seguenti errori non definiti e con valore nullo:

Il problema con questo esempio specifico è che le regole non fanno differenza tra la creazione del documento e l'aggiornamento del documento. Di conseguenza, la scrittura non è consentita se il documento non esiste e il documento non può essere creato perché non esiste. Differenziare la "scrittura" in due operazioni più specifiche - "crea" e "aggiorna" - risolve il problema.

CloudFirestore

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

Il report generato mostra la frequenza con cui ciascuna regola è stata utilizzata e cosa è stato restituito.