Anwendung mit dem Realtime Database-Emulator verbinden

Bevor Sie Ihre Anwendung mit dem Realtime Database-Emulator verbinden, sollten Sie sich mit dem allgemeinen Firebase Local Emulator Suite-Workflow vertraut machen. Außerdem müssen Sie die Local Emulator Suite installieren und konfigurieren und sich die CLI-Befehle ansehen.

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. Alternativ können Sie das Flag --project an jeden Emulatorbefehl übergeben.

Local Emulator Suite unterstützt die Emulation von echten Firebase-Projekten und Demoprojekten.

Projekttyp Funktionen Mit Emulatoren verwenden
Real

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

Echte Projekte haben Live-Ressourcen wie Datenbankinstanzen, Storage-Buckets, Funktionen oder andere Ressourcen, die Sie für dieses Firebase-Projekt einrichten.

Wenn Sie mit echten Firebase-Projekten arbeiten, können Sie Emulatoren für alle oder einige der unterstützten Produkte ausführen.

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

Demo

Ein Firebase-Demoprojekt hat keine echte Firebase-Konfiguration und keine Live-Ressourcen. Auf diese Projekte wird in der Regel über Code-Labs oder andere Tutorials zugegriffen.

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

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

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

  • Einfachere Einrichtung, da Sie die Emulatoren ausführen können, ohne ein Firebase-Projekt erstellen zu müssen
  • Höhere Sicherheit, da bei versehentlichem Aufruf nicht emulierter (Produktions-)Ressourcen durch Ihren Code keine Datenänderung, Nutzung und Abrechnung möglich ist.
  • Bessere Offline-Unterstützung, da kein Internetzugriff erforderlich ist, um Ihre SDK-Konfiguration herunterzuladen.

Anwendung für die Kommunikation mit den Emulatoren instrumentieren

Android-, Apple- und Web-SDKs

Richten Sie Ihre In-App-Konfiguration oder Testklassen so ein, dass sie mit der Realtime Database interagieren:

Kotlin
// 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")
Einheit
// Connects to the RTDB Emulator running on port 9000.
// Note: You may need to append your namespace: "?ns=YOUR_PROJECT_ID"
FirebaseDatabase database = FirebaseDatabase.GetInstance("http://127.0.0.1:9000");

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 das Testen von Cloud Functions-Funktionen, die durch Realtime Database-Ereignisse ausgelöst werden, ist keine zusätzliche Einrichtung erforderlich. Wenn sowohl der Realtime Database- als auch der Cloud Functions-Emulator ausgeführt werden, arbeiten sie automatisch zusammen.

Admin SDK Sek.

Die Firebase Admin SDKs 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 Ihr Code im Cloud Functions-Emulator ausgeführt wird, werden Ihre Projekt-ID und andere Konfigurationen automatisch festgelegt, wenn Sie initializeApp aufrufen.

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

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

Datenbank zwischen Tests löschen

Wenn Sie die Realtime Database zwischen Aktivitäten leeren möchten, können Sie den Datenbankverweis löschen. Sie können diesen Ansatz als Alternative zum einfachen Beenden des Emulatorprozesses verwenden.

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

Natürlich sollte Ihr Code mithilfe der asynchronen Ereignisverarbeitungsfunktionen Ihrer Plattform auf die Bestätigung warten, dass die Leerung abgeschlossen oder fehlgeschlagen ist.

Wenn Sie einen solchen Schritt implementiert haben, können Sie Ihre Tests nacheinander ausführen und Ihre Funktionen auslösen. Sie können sich darauf verlassen, 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 Baseline-Datensatz, der in Ihren Unit-Tests oder Continuous Integration-Workflows verwendet werden soll, und exportieren Sie ihn, um ihn im Team freizugeben.

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. Geben Sie dazu entweder einen Exportpfad an oder verwenden Sie einfach den Pfad, der an das Flag --import übergeben wurde.

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

Diese Optionen für den Datenimport und -export funktionieren auch mit dem Befehl firebase emulators:exec. Weitere Informationen finden Sie in der Referenz zu Emulatorbefehlen.

Aktivitäten im Zusammenhang mit Sicherheitsregeln visualisieren

Während Sie Prototypen erstellen und testen, können Sie die Visualisierungstools und Berichte der Local Emulator Suite verwenden.

Regelauswertungen visualisieren

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

Nachdem Sie eine Reihe von Tests ausgeführt haben, können Sie auf Berichte zur Testabdeckung zugreifen, in denen Sie sehen, wie die einzelnen Regeln ausgewertet wurden. Wenn Sie die Berichte abrufen möchten, fragen Sie einen freigegebenen Endpunkt im Emulator ab, während er ausgeführt wird. Verwenden Sie für eine browserfreundliche Version die folgende URL:

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

Dadurch werden Ihre Regeln in Ausdrücke und Unterausdrücke aufgeteilt. Wenn Sie den Mauszeiger darauf bewegen, erhalten Sie weitere Informationen, einschließlich der Anzahl der Ausführungen und der zurückgegebenen Werte. Wenn Sie die Roh-JSON-Version dieser Daten abrufen möchten, fügen Sie die folgende URL in Ihre Abfrage ein:

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

Nächste Schritte