Prima di collegare l'app all'emulatore Realtime Database, assicurati di comprendere il flusso di lavoro complessivo di Firebase Local Emulator Suite, di installare e configurare Local Emulator Suite e di esaminare i relativi comandi CLI.
Scegli un progetto Firebase
Firebase Local Emulator Suite emula i prodotti per un singolo progetto Firebase.
Per selezionare il progetto da utilizzare, prima di avviare gli emulatori, esegui firebase use
nella directory di lavoro in CLI. In alternativa, puoi passare il flag --project
a ogni comando dell'emulatore.
Local Emulator Suite supporta l'emulazione di progetti Firebase reali e progetti dimostrativi.
Tipo di progetto | Funzionalità | Utilizzo con emulatori |
---|---|---|
Reale |
Un progetto Firebase reale è quello che hai creato e configurato (molto probabilmente tramite la console Firebase). I progetti reali hanno risorse attive, come istanze di database, bucket di archiviazione, funzioni o qualsiasi altra risorsa configurata per il progetto Firebase. |
Quando lavori con progetti Firebase reali, puoi eseguire emulatori per uno o tutti i prodotti supportati. Per tutti i prodotti che non stai emulando, le tue app e il tuo codice interagiranno con la risorsa in produzione (istanza di database, bucket di archiviazione, funzione e così via). |
Demo |
Un progetto Firebase dimostrativo non ha una configurazione Firebase reale e non ha risorse attive. In genere, si accede a questi progetti tramite codelab o altri tutorial. Gli ID progetto per i progetti demo hanno il prefisso |
Quando utilizzi progetti Firebase di prova, le tue app e il tuo codice interagiscono solo con gli emulatori. Se la tua app tenta di interagire con una risorsa per la quale non è in esecuzione un emulatore, il codice non andrà a buon fine. |
Ti consigliamo di utilizzare progetti demo, se possibile. I vantaggi includono:
- Configurazione più semplice, poiché puoi eseguire gli emulatori senza dover creare un progetto Firebase
- Maggiore sicurezza, poiché se il codice richiama accidentalmente risorse non emulate (di produzione), non c'è alcuna possibilità di modifica, utilizzo e fatturazione dei dati
- Migliore assistenza offline, poiché non è necessario accedere a internet per scaricare la configurazione dell'SDK.
Instrumenta l'app in modo che possa comunicare con gli emulatori
Android, piattaforme Apple e SDK web
Configura la configurazione in-app o le classi di test per interagire con Realtime Database come segue.
Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val database = Firebase.database database.useEmulator("10.0.2.2", 9000)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseDatabase database = FirebaseDatabase.getInstance(); database.useEmulator("10.0.2.2", 9000);
Swift
// In almost all cases the ns (namespace) is your project ID. let db = Database.database(url:"http://127.0.0.1:9000?ns=YOUR_DATABASE_NAMESPACE")
Web
import { getDatabase, connectDatabaseEmulator } from "firebase/database"; const db = getDatabase(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. connectDatabaseEmulator(db, "127.0.0.1", 9000); }
Web
var db = firebase.database(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. db.useEmulator("127.0.0.1", 9000); }
Non è necessaria alcuna configurazione aggiuntiva per testare le funzioni Cloud attivate dagli eventi di Realtime Database utilizzando l'emulatore. Quando gli emulatori di Realtime Database e Cloud Functions sono entrambi in esecuzione, lavorano automaticamente insieme.
Admin SDK s
I Firebase Admin SDK si connettono automaticamente all'emulatore Realtime Database quando è impostata la variabile di ambiente FIREBASE_DATABASE_EMULATOR_HOST
:
export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"
Se il codice viene eseguito all'interno dell'emulatore Cloud Functions, l'ID progetto e altre configurazioni verranno impostati automaticamente quando chiami initializeApp
.
Se vuoi che il codice Admin SDK si connetta a un emulatore condiviso in un altro ambiente, devi specificare lo stesso ID progetto impostato utilizzando Firebase CLI.
Puoi passare un ID progetto direttamente a initializeApp
o impostare la variabile di ambiente GCLOUD_PROJECT
.
SDK Node.js Admin
admin.initializeApp({ projectId: "your-project-id" });
Variabile di ambiente
export GCLOUD_PROJECT="your-project-id"
Svuotare il database tra un test e l'altro
Per svuotare Realtime Database tra le attività, puoi cancellare il riferimento al database. Puoi utilizzare questo approccio come alternativa alla semplice chiusura del processo dell'emulatore.
Kotlin+KTX
// With a DatabaseReference, write null to clear the database. database.reference.setValue(null)
Java
// With a DatabaseReference, write null to clear the database. database.getReference().setValue(null);
Swift
// With a DatabaseReference, write nil to clear the database. Database.database().reference().setValue(nil);
Web
import { getDatabase, ref, set } from "firebase/database"; // With a database Reference, write null to clear the database. const db = getDatabase(); set(ref(db), null);
Web
// With a database Reference, write null to clear the database. firebase.database().ref().set(null);
Naturalmente, il codice deve attendere la conferma che lo svuotamento sia stato completato o abbia avuto esito negativo utilizzando le funzionalità di gestione degli eventi asincroni della piattaforma.
Dopo aver implementato un passaggio come questo, puoi sequenziare i test e attivare le funzioni con la certezza che i vecchi dati verranno eliminati tra un'esecuzione e l'altra e che utilizzi una nuova configurazione di test di riferimento.
Importazione ed esportazione di dati
Gli emulatori di database e Cloud Storage for Firebase ti consentono di esportare i dati da un'istanza di emulatore in esecuzione. Definisci un set di dati di riferimento da utilizzare nei test di unità o nei flussi di lavoro di integrazione continua, quindi esportalo per condividerlo con il team.
firebase emulators:export ./dir
Nei test, all'avvio dell'emulatore, importa i dati di riferimento.
firebase emulators:start --import=./dir
Puoi indicare all'emulatore di esportare i dati all'arresto, specificando un percorso di esportazione o semplicemente utilizzando il percorso passato al flag --import
.
firebase emulators:start --import=./dir --export-on-exit
Queste opzioni di importazione ed esportazione dei dati funzionano anche con il comando firebase emulators:exec
. Per saperne di più, consulta il riferimento ai comandi dell'emulatore.
Visualizzare l'attività delle regole di sicurezza
Man mano che esegui i loop di test e di creazione di prototipi, puoi utilizzare gli strumenti di visualizzazione e i report forniti da Local Emulator Suite.
Visualizzare le valutazioni delle regole
Man mano che aggiungi le regole di sicurezza al tuo prototipo, puoi eseguire il debug con gli strumentiLocal Emulator Suite.
Dopo aver eseguito una suite di test, puoi accedere ai report sulla copertura dei test che mostrano come è stata valutata ciascuna delle tue regole. Per ottenere i report, esegui una query su un endpoint esposto sull'emulatore durante l'esecuzione. Per una versione adatta ai browser, utilizza il seguente URL:
http://localhost:9000/.inspect/coverage?ns=<database_name>
In questo modo, le regole vengono suddivise in espressioni e sottoespressioni su cui puoi eseguire il passaggio del mouse per visualizzare ulteriori informazioni, tra cui il numero di esecuzioni e i valori restituiti. Per la versione JSON non elaborata di questi dati, includi il seguente URL nella query:
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
Che cosa succede ora?
- Per una raccolta selezionata di video ed esempi pratici dettagliati, consulta la playlist di formazione su Firebase Emulators.
- Esamina casi d'uso avanzati che coinvolgono i test delle regole di sicurezza e l'SDK di test di Firebase: Testare le regole di sicurezza (Realtime Database).
- Poiché le funzioni attivate sono un'integrazione tipica con Realtime Database, scopri di più sull'emulatore Cloud Functions for Firebase in Eseguire funzioni localmente.