Prima di connettere la tua app all'emulatore Realtime Database, assicurati che: il flusso di lavoro Firebase Local Emulator Suite generale, e di installare e configurare Local Emulator Suite e rivedi i relativi comandi dell'interfaccia a riga di comando.
Scegli un progetto Firebase
L'elemento Firebase Local Emulator Suite emula i prodotti per un singolo progetto Firebase.
Per selezionare il progetto da utilizzare, prima di avviare gli emulatori, nell'esecuzione dell'interfaccia a riga di comando
firebase use
nella directory di lavoro. In alternativa, puoi passare
il flag --project
per ogni emulatore
.
Local Emulator Suite supporta l'emulazione di progetti Firebase reali e progetti demo.
Tipo di progetto | Funzionalità | Usa con emulatori |
---|---|---|
Reale |
Un vero progetto Firebase è un progetto che hai creato e configurato (molto probabilmente tramite la console Firebase). I progetti reali includono risorse in tempo reale, ad esempio istanze di database, bucket, funzioni o qualsiasi altra risorsa configurata per l'account Firebase progetto. |
Quando lavori con progetti Firebase reali, puoi eseguire emulatori per qualsiasi o tutti i prodotti supportati. Per i prodotti non emulati, le tue app e il tuo codice interagiscono con la risorsa live (istanza di database, bucket, funzione e così via). |
Demo |
Un progetto Firebase dimostrativo non ha una configurazione Firebase reale e nessuna risorsa attiva. Questi progetti sono in genere accessibili tramite codelab o altri tutorial. Gli ID progetto per i progetti demo hanno il prefisso |
Quando lavori con progetti Firebase dimostrativi, le app e il codice interagiscono con solo emulatori. Se la tua app tenta di interagire con una risorsa per cui non è in esecuzione un emulatore, il codice restituirà un errore. |
Ti consigliamo di utilizzare i progetti dimostrativi, 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 la modalità non emulata di produzione, non c'è la possibilità che i dati vengano modificati, utilizzati e fatturati
- Migliore supporto offline, in quanto non è necessario accedere a Internet per scarica la configurazione SDK.
Imposta la tua app per comunicare con gli emulatori
Piattaforme Android, Apple e SDK web
Imposta 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 Functions attivate da eventi di Realtime Database usando l'emulatore. Quando gli emulatori Realtime Database e Cloud Functions entrambi in esecuzione, interagiscono automaticamente.
Admin SDK s
I Firebase Admin SDK si connettono automaticamente all'emulatore Realtime Database quando
la variabile di ambiente FIREBASE_DATABASE_EMULATOR_HOST
è impostata:
export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"
Se il tuo codice è in esecuzione nell'emulatore Cloud Functions, il tuo ID progetto
e altre configurazioni verranno impostate automaticamente quando chiami initializeApp
.
Se vuoi che il codice Admin SDK si connetta a un emulatore condiviso in esecuzione
in un altro ambiente, dovrai specificare lo stesso ID progetto che hai impostato utilizzando l'interfaccia a riga di comando di Firebase.
Puoi passare un ID progetto direttamente a initializeApp
oppure impostare il valore
Variabile di ambiente GCLOUD_PROJECT
.
SDK Admin Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variabile di ambiente
export GCLOUD_PROJECT="your-project-id"
Cancella il database tra i test
Per eseguire il flush di Realtime Database tra le attività, puoi cancellare il riferimento del database. Puoi usare questo approccio in alternativa all'arresto del semplice 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 terminato o non sia riuscito utilizzando le funzionalità di gestione degli eventi asincroni della tua 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 definitivamente tra le esecuzioni e che tu stia utilizzando una nuova configurazione di test di riferimento.
Importazione ed esportazione di dati
Il database e gli emulatori Cloud Storage for Firebase ti consentono di esportare i dati da un'istanza dell'emulatore in esecuzione. Definisci un set di dati di riferimento da utilizzare nel tuo test delle unità o flussi di lavoro di integrazione continua, quindi esportali per condividerli nel 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
percorso di esportazione o semplicemente utilizzando il percorso passato a --import
flag.
firebase emulators:start --import=./dir --export-on-exit
Queste opzioni di importazione ed esportazione dei dati funzionano con
firebase emulators:exec
. Per saperne di più, consulta il riferimento ai comandi dell'emulatore.
Visualizza l'attività delle regole di sicurezza
Mentre lavori ai prototipi e ai cicli di test, puoi utilizzare gli strumenti di visualizzazione e i report forniti da Local Emulator Suite.
Visualizza valutazioni delle regole
Man mano che aggiungi regole di sicurezza al tuo prototipo, puoi eseguire il debug con gli strumentiLocal Emulator Suite.
Dopo aver eseguito una serie di test, puoi accedere ai report Copertura dei test che mostrano come è stata valutata ciascuna delle regole. Per ottenere i report, esegui una query su una sull'emulatore mentre è in 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 in la tua query:
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
Che cosa succede ora?
- Per una selezione di video ed esempi dettagliati di istruzioni, segui la playlist di formazione Firebase Emulators.
- Esamina i casi d'uso avanzati che coinvolgono il test delle regole di sicurezza e l'SDK di Firebase Test: Test Security Rules (Realtime Database).
- Poiché le funzioni attivate sono un'integrazione tipica con Realtime Database, scopri scopri di più sull'emulatore Cloud Functions for Firebase all'indirizzo Eseguire le funzioni localmente.