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

Collega la tua app all'emulatore Cloud Firestore

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

Prima di connettere la tua app all'emulatore Cloud Firestore, assicurati di aver compreso il flusso di lavoro generale di Firebase Local Emulator Suite e di installare e configurare Local Emulator Suite e di rivedere i suoi 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 esegui firebase use nella tua 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 in tempo reale, 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 codice interagiranno con la risorsa live (istanza del database, bucket di archiviazione, funzione, ecc.).

Demo

Un progetto Firebase demo non ha una configurazione Firebase reale e nessuna risorsa attiva. Questi progetti sono generalmente accessibili tramite codelab o altri tutorial.

Gli ID progetto per i progetti demo hanno il demo- demo.

Quando lavori con progetti Firebase demo, le tue app e il codice interagiscono solo con gli emulatori . Se l'app tenta di interagire con una risorsa per la quale non è in esecuzione un emulatore, il 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 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.

Strumento la tua app per parlare con gli emulatori

Android, piattaforme Apple e Web SDK

Configura la tua configurazione in-app o prova le classi per interagire con Cloud Firestore come segue.

Androide
// 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);
Veloce
let settings = Firestore.firestore().settings
settings.host = "localhost:8080"
settings.isPersistenceEnabled = false 
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web version 9

import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, 'localhost', 8080);

Web version 8

// 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 di Firebase Admin si connettono automaticamente all'emulatore Cloud Firestore quando viene impostata la variabile di ambiente FIRESTORE_EMULATOR_HOST :

export FIRESTORE_EMULATOR_HOST="localhost:8080"

Se il tuo codice è in esecuzione all'interno dell'emulatore di Cloud Functions, il tuo ID progetto e altre configurazioni verranno automaticamente impostati quando chiami initalizeApp .

Se desideri che il codice dell'SDK di amministrazione 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 per initializeApp direttamente o impostare la variabile di ambiente GCLOUD_PROJECT .

Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
Variabile d'ambiente
export GCLOUD_PROJECT="your-project-id"

Cancella il 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 una fase di configurazione/smontaggio 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 di emulazione.

In un metodo appropriato, esegui un'operazione HTTP DELETE, fornendo il tuo ID progetto Firebase, 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 è terminato o non è riuscito.

Puoi eseguire questa operazione dalla shell:

// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

Dopo aver implementato un passaggio come questo, puoi sequenziare i test e attivare le tue funzioni con la certezza che i vecchi dati verranno eliminati tra le esecuzioni e che stai utilizzando una nuova configurazione di test di base.

Importa ed esporta dati

Il database e gli emulatori Cloud Storage for Firebase consentono di esportare i dati da un'istanza dell'emulatore in esecuzione. Definisci un set di dati di base da utilizzare negli unit test 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 base.

firebase emulators:start --import=./dir

Puoi indicare all'emulatore di esportare i dati allo spegnimento, specificando un percorso di esportazione o semplicemente usando 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 firebase emulators:exec . Per ulteriori informazioni, fare riferimento al riferimento del comando dell'emulatore .

Visualizza l'attività delle regole di sicurezza

Mentre si lavora su prototipi e cicli di test, è possibile utilizzare strumenti di visualizzazione e report forniti da Local Emulator Suite.

Usa il monitoraggio 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.

Aprire la scheda Firestore > Richieste per visualizzare la sequenza di valutazione dettagliata per ciascuna richiesta.

Monitoraggio delle richieste dell'emulatore Firestore che mostra le valutazioni delle regole di sicurezza

Visualizza i rapporti di valutazione delle regole

Quando aggiungi le 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, esegui una query su un endpoint esposto sull'emulatore mentre è in esecuzione. Per una versione compatibile con browser, utilizzare il seguente URL:

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

Questo suddivide le tue regole in espressioni e sottoespressioni che puoi passare con il mouse per ulteriori informazioni, incluso il numero di valutazioni e valori restituiti. Per la versione JSON grezza di questi dati, includi il seguente URL nella tua query:

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

Qui, la versione HTML del report evidenzia le valutazioni che generano errori non definiti e di 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 di transazione visti in produzione. Quando stai testando funzionalità che coinvolgono 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 regolare 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 su un'istanza Cloud Firestore reale per determinare di quali indici avrai bisogno.

Limiti

L'emulatore non applica tutti i limiti imposti nella produzione. Ad esempio, l'emulatore può consentire transazioni che sarebbero rifiutate in quanto troppo grandi dal servizio di produzione. Assicurati di conoscere i limiti documentati e di progettare la tua app per evitarli in modo proattivo.

E dopo?