Cloud Firestore e Realtime Database si basano entrambi su linguaggi di regole potenti e concisi appositamente creati per gestire la sicurezza delle informazioni e il controllo degli accessi. Tuttavia, poiché le regole diventano più lunghe e complesse, potresti aver bisogno di aiuto per eseguire il debug degli errori nel loro comportamento.
Gli emulatori Firebase includono la possibilità di generare report sulla copertura delle regole, vedere esattamente a cosa è valutata ogni sottoespressione quando riproduci un errore. I report forniscono anche informazioni sulla frequenza di ciascun test maiuscole e minuscole hanno usato una regola, come "copertura linea" tradizionale tecniche.
Generare un report
Dopo aver eseguito una suite di test, puoi accedere e report sulla copertura che mostrano come è stata valutata ciascuna delle tue regole di sicurezza.
Per ottenere i report, esegui una query su un endpoint esposto sull'emulatore sia in esecuzione. Per una versione ottimizzata per il browser, utilizza il seguente URL:
Cloud Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
Realtime Database
http://localhost:9000/.inspect/coverage?ns=<database_name>
In questo modo le regole vengono suddivise in espressioni e sottoespressioni che puoi passaggio del mouse per ulteriori informazioni, tra cui il numero di valutazioni e valori restituito. Per la versione JSON non elaborata di questi dati, includi il seguente URL nella tua query:
Cloud Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
Realtime Database
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
Debug delle regole di esempio
Per generare facilmente un report di test, utilizza le guide rapide dell'emulatore disponibili su GitHub per Cloud Firestore e Realtime Database. Queste guide rapide ti guidano nella corretta installazione e inizializzare gli emulatori, generando quindi test di esempio a partire da un esempio un insieme di regole.
Prendi in considerazione un'app di esempio che utilizza Cloud Firestore per conteggiare il numero di volte in cui gli utenti fanno clic su un pulsante. L'app utilizza le seguenti regole:
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; } } }
Per eseguire il debug degli errori nelle regole mostrate sopra, utilizza il seguente esempio Test JavaScript:
const counter0 = db.collection("counters").doc("0");
await firebase.assertSucceeds(counter0.set({value: 0}));
L'emulatore genera un report disponibile all'URL indicato sopra:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
Il report mostra i seguenti errori non definiti e di valore nullo:
Il problema di questo esempio specifico è che le regole non differenziano tra la creazione e l'aggiornamento del documento. Di conseguenza, scrittura non è consentita se il documento non esiste e il documento non può essere perché non esiste. Distinguere il linguaggio "scrittura" in due operazioni più specifiche: "create" e "update" , risolve il problema.
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; } } }
Il report generato mostra la frequenza di utilizzo di ogni regola e la restituito.