Anwendung mit dem Realtime Database-Emulator verbinden

Bevor du deine App mit dem Realtime Database-Emulator verbindest, prüfe, ob Sie verstehen den gesamten Firebase Local Emulator Suite-Workflow und Sie installieren und konfigurieren Local Emulator Suite und überprüfen Sie die zugehörigen CLI-Befehle.

Firebase-Projekt auswählen

Die Firebase Local Emulator Suite emuliert Produkte für ein einzelnes Firebase-Projekt.

Wenn Sie das zu verwendende Projekt auswählen möchten, führen Sie vor dem Starten der Emulatoren in der Befehlszeile firebase use in Ihrem Arbeitsverzeichnis aus. Oder Sie können das Flag --project für jeden Emulator .

Local Emulator Suite unterstützt die Emulation realer Firebase-Projekte und demo-Projekte erstellen.

Projekttyp Funktionen Mit Emulatoren verwenden
Real

Ein echtes Firebase-Projekt ist ein Projekt, das Sie erstellt und konfiguriert haben (höchstwahrscheinlich über die Firebase-Konsole).

Echte Projekte haben Live-Ressourcen wie Datenbankinstanzen, Speicher Buckets, Funktionen oder einer anderen Ressource, die Sie für dieses Firebase eingerichtet haben Projekt arbeiten.

Bei der Arbeit mit echten Firebase-Projekten können Sie Emulatoren für beliebige oder alle unterstützten Produkte.

Bei Produkten, die Sie nicht emulieren, interagieren Ihre Apps und Ihr Code mit der Live-Ressource (Datenbankinstanz, Speicher-Bucket, Funktion usw.).

Demo

Ein Firebase-Demoprojekt hat keine echte Firebase-Konfiguration und keine Live-Ressourcen. Der Zugriff auf diese Projekte erfolgt in der Regel über Codelabs oder anderen Tutorials finden.

Projekt-IDs für Demoprojekte haben das Präfix demo-.

Bei der Arbeit mit Firebase-Demoprojekten interagieren Ihre Apps und Ihr Code mit nur Emulatoren. Wenn Ihre App versucht, mit einer Ressource zu interagieren für die kein Emulator ausgeführt wird, schlägt der Code fehl.

Wir empfehlen, nach Möglichkeit Demoprojekte zu verwenden. Die wichtigsten Vorteile:

  • Die Einrichtung ist einfacher, da Sie die Emulatoren ausführen können, ohne Firebase-Projekt
  • Höhere Sicherheit, da bei versehentlichem Aufruf nicht emulierter (Produktions-)Ressourcen durch Ihren Code keine Daten geändert werden und es keine Nutzung und Abrechnung gibt
  • Besserer Offline-Support, da keine Internetverbindung erforderlich ist, um laden Sie die SDK-Konfiguration herunter.

App instrumentieren, um mit den Emulatoren zu kommunizieren

Android-, Apple-Plattformen und Web-SDKs

Richten Sie Ihre In-App-Konfiguration oder Testklassen ein, um mit dem Realtime Database so.

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);
} 

Für den Test von Cloud Functions, die durch Realtime Database-Ereignisse ausgelöst werden, ist keine zusätzliche Einrichtung erforderlich. Wenn die Emulatoren von Realtime Database und Cloud Functions arbeiten sie automatisch zusammen.

Admin SDK Sek.

Die Firebase Admin SDK stellen automatisch eine Verbindung zum Realtime Database-Emulator her, wenn die Umgebungsvariable FIREBASE_DATABASE_EMULATOR_HOST festgelegt ist:

export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

Wenn der Code im Cloud Functions-Emulator ausgeführt wird, ist Ihre Projekt-ID und andere Einstellungen werden beim Aufrufen von initializeApp automatisch festgelegt.

Wenn Sie möchten, dass sich Ihr Admin SDK-Code mit einem freigegebenen Emulator verbindet, der ausgeführt wird in in einer anderen Umgebung haben, müssen Sie dieselbe Projekt-ID angeben, die Sie über die Firebase CLI festgelegt haben. Sie können eine Projekt-ID direkt an initializeApp übergeben oder die GCLOUD_PROJECT.

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

Datenbank zwischen Tests löschen

Zum Leeren des Realtime Database zwischen Aktivitäten können Sie die Datenbankreferenz löschen. Sie können diesen Ansatz als Alternative zum einfachen Herunterfahren des Emulators verwenden.

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

Ihr Code sollte natürlich auf die Bestätigung warten, dass der Leerungsvorgang mit den asynchronen Ereignisverarbeitungsfunktionen Ihrer Plattform abgeschlossen wurde oder fehlgeschlagen ist.

Nachdem Sie einen solchen Schritt implementiert haben, können Sie Ihre Tests sequenzieren und Ihre Funktionen mit der Gewissheit auslösen, dass alte Daten zwischen den Ausführungen gelöscht werden und Sie eine neue Baseline-Testkonfiguration verwenden.

Daten importieren und exportieren

Mit den Datenbank- und Cloud Storage for Firebase-Emulatoren können Sie Daten aus einer laufenden Emulatorinstanz exportieren. Definieren Sie einen Basisdatensatz für die Unittests oder Continuous-Integration-Workflows, die Sie dann zur gemeinsamen Nutzung exportieren innerhalb des Teams.

firebase emulators:export ./dir

Importieren Sie in Tests beim Start des Emulators die Referenzdaten.

firebase emulators:start --import=./dir

Sie können den Emulator anweisen, Daten beim Herunterfahren zu exportieren, indem Sie entweder oder einfach den an --import übergebenen Pfad verwenden melden.

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

Diese Datenimport- und -exportoptionen funktionieren mit dem firebase emulators:exec-Befehl hinzu. Weitere Informationen finden Sie in der Befehlsreferenz für den Emulator.

Aktivität zu Sicherheitsregeln visualisieren

Beim Durcharbeiten von Prototypen und Testschleifen können Sie Visualisierungstools verwenden und Berichte werden von Local Emulator Suite bereitgestellt.

Regelauswertungen visualisieren

Wenn Sie Ihrem Prototyp Sicherheitsregeln hinzufügen, können Sie diese mit Local Emulator Suite-Tools.

Nachdem Sie eine Reihe von Tests durchgeführt haben, können Sie auf Berichte zur Testabdeckung zugreifen, in denen wie die einzelnen Regeln ausgewertet wurden. Fragen Sie zum Abrufen der Berichte eine Endpunkt im Emulator, während er ausgeführt wird. Für eine browserfreundliche Version verwenden Sie die folgende URL:

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

Dadurch werden Ihre Regeln in Ausdrücke und Unterausdrücke aufgeteilt, Mouseover für weitere Informationen, einschließlich der Anzahl der Ausführungen und Werte zurückgegeben. Fügen Sie für die JSON-Rohversion dieser Daten die folgende URL in Ihre Abfrage ein:

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

Und jetzt?