Catch up on everthing we announced at this year's Firebase Summit. Learn more

Collega la tua app all'emulatore di database in tempo reale

Prima di collegare la vostra applicazione per l'emulatore di database in tempo reale, assicurarsi che si capisce il flusso di lavoro complessivo Firebase locale emulatore Suite , e che si installa e si configura l'emulatore Suite locale e 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 per l'uso, prima di iniziare gli emulatori, nella corsa CLI firebase use nella vostra directory di lavoro. In alternativa, è possibile passare l' --project bandiera per ogni comando emulatore.

Locale Emulator Suite supporta l'emulazione di progetti Firebase reali e demo di progetti.

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 attive, 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 sono emulando, le applicazioni e il codice potranno interagire con la risorsa dal vivo (istanza di database, benna di immagazzinaggio, funzione, ecc).

Dimostrazione

Un progetto Firebase demo ha alcuna reale configurazione Firebase e senza risorse dal vivo. Questi progetti sono generalmente accessibili tramite codelab o altri tutorial.

Progetto ID per demo progetti hanno la demo- prefisso.

Quando si lavora con progetti dimostrativi Firebase, le applicazioni e il codice interagiscono solo con emulatori. Se la tua 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 tuo codice richiama accidentalmente risorse (di produzione) non emulate, non c'è possibilità di modifica dei dati, utilizzo e fatturazione
  • Migliore supporto offline, poiché non è necessario accedere a Internet per scaricare la configurazione dell'SDK.

Configura 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 il database in tempo reale come segue.

Android
        // 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://localhost:9000?ns=YOUR_DATABASE_NAMESPACE")

Versione web 9

import { getDatabase, connectDatabaseEmulator } from "firebase/database";

const db = getDatabase();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  connectDatabaseEmulator(db, "localhost", 9000);
} 

Versione web 8

var db = firebase.database();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  db.useEmulator("localhost", 9000);
} 

Nessuna messa a punto supplementare è necessario per testare le funzioni cloud attivati da tempo reale gli eventi di database utilizzando l'emulatore. Quando gli emulatori di Realtime Database e Cloud Functions sono entrambi in esecuzione, funzionano automaticamente insieme.

SDK di amministrazione

L'amministratore SDK Firebase connettersi automaticamente al database emulatore in tempo reale quando la FIREBASE_DATABASE_EMULATOR_HOST è impostato variabile d'ambiente:

export FIREBASE_DATABASE_EMULATOR_HOST="localhost:9000"

Se il codice è in esecuzione all'interno delle funzioni cloud emulatore l'ID del progetto e altre configurazioni saranno impostati automaticamente quando si chiama initalizeApp .

Quando ci si connette all'emulatore Realtime Database da qualsiasi altro ambiente, sarà necessario specificare un ID progetto. È possibile passare un ID progetto per initializeApp direttamente o impostare la GCLOUD_PROJECT variabile d'ambiente. Tieni presente che non è necessario utilizzare il tuo vero ID progetto Firebase, l'emulatore Realtime Database accetterà qualsiasi ID progetto:

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

Per svuotare il database in tempo reale tra le attività, è possibile cancellare il riferimento al database. È possibile utilizzare questo approccio come alternativa alla semplice chiusura del processo di emulazione.

Android
// 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);

Versione web 9

import { getDatabase, ref, set } from "firebase/database";

// With a database Reference, write null to clear the database.
const db = getDatabase();
set(ref(db), null);

Versione web 8

// With a database Reference, write null to clear the database.
firebase.database().ref().set(null);

Naturalmente, il tuo codice dovrebbe attendere la conferma che il flush è terminato o non è riuscito utilizzando le funzionalità di gestione degli eventi asincroni della tua piattaforma.

Dopo aver implementato un passaggio come questo, puoi sequenziare 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.

Importa ed esporta dati

Gli emulatori di database e Cloud Storage consentono di esportare dati da un'istanza dell'emulatore in esecuzione. Definisci un set di dati di base da utilizzare nei tuoi unit test o nei flussi di lavoro di integrazione continua, quindi esportalo per essere condiviso tra il team.

firebase emulators:export ./dir

Nei test, all'avvio dell'emulatore, importare i dati di base.

firebase emulators:start --import=./dir

È possibile indicare l'emulatore per esportare i dati in arresto, specificando un percorso di esportazione o semplicemente utilizzando il percorso passato al --import bandiera.

firebase emulators:start --import=./dir --export-on-exit

Queste opzioni di importazione ed esportazione dei dati lavorare con i firebase emulators:exec comando. Per di più, fare riferimento al riferimento comando emulatore .

Visualizza attività Regole di sicurezza

Durante l'elaborazione di prototipi e cicli di test, è possibile utilizzare strumenti di visualizzazione e report forniti da Local Emulator Suite.

Visualizza le valutazioni delle regole

Quando aggiungi regole di sicurezza al tuo prototipo, puoi eseguirne il debug con gli strumenti di Local Emulator Suite.

Dopo aver eseguito una serie di test, puoi accedere ai rapporti sulla copertura dei test che mostrano come è stata valutata ciascuna delle tue regole. Per ottenere i report, eseguire una query su un endpoint esposto sull'emulatore mentre è in esecuzione. Per una versione compatibile con il browser, utilizzare il seguente URL:

http://localhost:9000/.inspect/coverage?ns=<database_name>

Ciò suddivide le regole in espressioni e sottoespressioni su cui è possibile passare il mouse per ulteriori informazioni, incluso 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>

E dopo?