Prima di connettere la tua app all'emulatore Cloud Firestore, assicurati di aver compreso il flusso di lavoro generale di Firebase Local Emulator Suite , di installare e configurare Local Emulator Suite e di rivederne i 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, nella CLI eseguire firebase use
nella propria directory di lavoro. Oppure puoi passare il flag --project
a ciascun comando dell'emulatore.
Local Emulator Suite supporta l'emulazione di progetti Firebase reali e progetti demo .
Tipo di progetto | Caratteristiche | Utilizzare con emulatori |
---|---|---|
Vero | Un vero progetto Firebase è quello che hai creato e configurato (molto probabilmente tramite la console Firebase). I progetti reali hanno risorse live, come istanze di database, bucket di archiviazione, funzioni o qualsiasi altra risorsa configurata per quel 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 live (istanza di database, bucket di archiviazione, funzione e così via). |
Demo | Un progetto Firebase demo non ha una configurazione Firebase reale e nessuna risorsa attiva. Di solito si accede a questi progetti tramite codelab o altri tutorial. Gli ID progetto per i progetti demo hanno il prefisso | Quando lavori con progetti dimostrativi Firebase, 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, tale codice avrà esito negativo. |
Ti consigliamo di utilizzare progetti demo ove possibile. I vantaggi includono:
- Configurazione più semplice, poiché puoi eseguire gli emulatori senza mai creare un progetto Firebase
- Maggiore sicurezza, poiché se il tuo codice richiama accidentalmente risorse (di produzione) non emulate, non vi è alcuna possibilità di modifica, utilizzo e fatturazione dei dati
- Migliore supporto offline, poiché non è necessario accedere a Internet per scaricare la configurazione dell'SDK.
Strumenta la tua app per parlare con gli emulatori
Android, piattaforme Apple e Web SDK
Imposta la configurazione in-app o le classi di test per interagire con Cloud Firestore 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 firestore = Firebase.firestore firestore.useEmulator("10.0.2.2", 8080) firestore.firestoreSettings = firestoreSettings { isPersistenceEnabled = false }
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFirestore firestore = FirebaseFirestore.getInstance(); firestore.useEmulator("10.0.2.2", 8080); FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder() .setPersistenceEnabled(false) .build(); firestore.setFirestoreSettings(settings);
Rapido
let settings = Firestore.firestore().settings settings.host = "localhost:8080" settings.isPersistenceEnabled = false settings.isSSLEnabled = false Firestore.firestore().settings = settings
Web modular API
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore"; // firebaseApps previously initialized using initializeApp() const db = getFirestore(); connectFirestoreEmulator(db, 'localhost', 8080);
Web namespaced API
// Firebase previously initialized using firebase.initializeApp(). var db = firebase.firestore(); if (location.hostname === "localhost") { db.useEmulator("localhost", 8080); }
Non è necessaria alcuna configurazione aggiuntiva per testare le funzioni cloud attivate da eventi Firestore utilizzando l'emulatore. Quando gli emulatori Firestore e Cloud Functions sono entrambi in esecuzione, funzionano automaticamente insieme.
SDK di amministrazione
Gli SDK Firebase Admin si connettono automaticamente all'emulatore Cloud Firestore quando la variabile di ambiente FIRESTORE_EMULATOR_HOST
è impostata:
export FIRESTORE_EMULATOR_HOST="localhost:8080"
Se il tuo codice è in esecuzione all'interno dell'emulatore di Cloud Functions, il tuo ID progetto e altra configurazione verranno impostati automaticamente quando chiami initalizeApp
.
Se desideri che il tuo 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 direttamente un ID progetto a initializeApp
o impostare la variabile di ambiente GCLOUD_PROJECT
.
SDK di amministrazione di Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variabile d'ambiente
export GCLOUD_PROJECT="your-project-id"
Cancella il tuo database tra i test
Production Firestore non fornisce alcun metodo SDK della piattaforma per svuotare il database, ma l'emulatore Firestore fornisce un endpoint REST specifico per questo scopo, che può essere chiamato da un passaggio di configurazione/tearDown del framework di test, da una classe di test o dalla shell (ad es. , con curl
) prima dell'inizio di un test. È possibile utilizzare questo approccio come alternativa alla semplice chiusura del processo dell'emulatore.
In un metodo appropriato, esegui un'operazione HTTP DELETE, fornendo il tuo Firebase projectID, ad esempio firestore-emulator-example
, al seguente endpoint:
"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"
Naturalmente, il tuo codice dovrebbe attendere la conferma REST che il flush sia terminato o fallito.
Puoi eseguire questa operazione dalla shell:
// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"
Avendo implementato un passaggio come questo, puoi mettere in sequenza i tuoi test e attivare le tue funzioni con la certezza che i vecchi dati verranno eliminati tra le esecuzioni e stai utilizzando una nuova configurazione di test di base.
Importare ed esportare dati
Il database e gli emulatori di Cloud Storage per Firebase ti consentono di esportare i dati da un'istanza dell'emulatore in esecuzione. Definisci un set di dati di base da utilizzare nei test unitari 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
È possibile 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 ulteriori informazioni, fare riferimento al riferimento al comando dell'emulatore .
Visualizza l'attività delle regole di sicurezza
Mentre lavori su prototipi e cicli di test, puoi utilizzare strumenti di visualizzazione e report forniti da Local Emulator Suite.
Usa il monitor delle richieste
L'emulatore Cloud Firestore ti consente di visualizzare le richieste dei client nell'interfaccia utente di Emulator Suite, inclusa la traccia di valutazione per le regole di sicurezza Firebase.
Apri la scheda Firestore > Richieste per visualizzare la sequenza di valutazione dettagliata per ogni richiesta.
Visualizza i report di valutazione delle regole
Man mano che aggiungi regole di sicurezza al tuo prototipo, puoi eseguirne il debug con gli strumenti di debug di Local Emulator Suite.
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:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
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:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
Qui, la versione HTML del rapporto evidenzia le valutazioni che generano errori indefiniti e con valore nullo:
In che modo l'emulatore Cloud Firestore differisce dalla produzione
L'emulatore Cloud Firestore tenta di replicare fedelmente il comportamento del servizio di produzione con alcune notevoli limitazioni.
Transazioni
L'emulatore attualmente non implementa tutti i comportamenti delle transazioni visti in produzione. Quando si testano funzionalità che implicano più scritture simultanee su un documento, l'emulatore potrebbe essere lento nel completare le richieste di scrittura. In alcuni casi, il rilascio dei blocchi può richiedere fino a 30 secondi. Prendi in considerazione la possibilità di modificare i timeout dei test di conseguenza, se necessario.
Indici
L'emulatore non tiene traccia degli indici composti e invece eseguirà qualsiasi query valida. Assicurati di testare la tua app rispetto a una vera istanza di Cloud Firestore per determinare quali indici ti serviranno.
Limiti
L'emulatore non applica tutti i limiti imposti in produzione. Ad esempio, l'emulatore può consentire transazioni che verrebbero rifiutate in quanto troppo grandi dal servizio di produzione. Assicurati di avere familiarità con i limiti documentati e di progettare la tua app in modo da evitarli in modo proattivo.
E dopo?
- Per una serie curata di video ed esempi pratici dettagliati, segui la playlist di formazione sugli emulatori Firebase .
- Esamina casi d'uso avanzati che coinvolgono il test delle regole di sicurezza e Firebase Test SDK: Test Security Rules (Firestore) .
- Poiché le funzioni attivate sono una tipica integrazione con Cloud Firestore, scopri di più sull'emulatore di Cloud Functions per Firebase su Esegui le funzioni in locale .