Bevor Sie Ihre App mit dem Realtime Database Emulator verbinden, sollten Sie sich mit dem allgemeinen Firebase Local Emulator Suite Workflow vertraut machen und die Local Emulator Suite installieren und konfigurieren sowie die CLI-Befehle prüfen.
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 CLI im Arbeitsverzeichnis firebase use aus. Alternativ können Sie das
Flag an jeden Emulator
Befehl übergeben.--project
Local Emulator Suite unterstützt die Emulation von echten Firebase-Projekten und Demoprojekten.
| Projekttyp | Funktionen | Verwendung mit Emulatoren |
|---|---|---|
| Echt |
Ein echtes Firebase-Projekt ist ein Projekt, das Sie erstellt und konfiguriert haben (wahrscheinlich über die Firebase Konsole). Echte Projekte haben aktive Ressourcen wie Datenbankinstanzen, Cloud Storage-Buckets Funktionen oder andere Ressourcen, die Sie für dieses Firebase-Projekt eingerichtet haben. |
Wenn Sie mit echten Firebase-Projekten arbeiten, können Sie Emulatoren für alle oder alle unterstützten Produkte ausführen. Für alle Produkte, die Sie nicht emulieren, interagieren Ihre Apps und Ihr Code mit der aktiven Ressource (Datenbankinstanz, Cloud Storage-Bucket, Funktion usw.). |
| Demo |
Ein Firebase-Demoprojekt hat keine echte Firebase-Konfiguration und keine aktiven Ressourcen. Auf diese Projekte wird in der Regel über Codelabs oder andere Anleitungen zugegriffen. Projekt-IDs für Demoprojekte haben das Präfix |
Wenn Sie mit Firebase-Demoprojekten arbeiten, interagieren Ihre Apps und Ihr Code mit Emulatoren nur. Wenn Ihre App versucht, mit einer Ressource zu interagieren, für die kein Emulator ausgeführt wird, schlägt der Code fehl. |
Wir empfehlen, Demoprojekte nach Möglichkeit zu verwenden. Dies sind 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 von nicht emulierten (Produktions-)Ressourcen durch Ihren Code keine Datenänderungen, Nutzung und Abrechnung erfolgen
- Bessere Offlineunterstützung, da Sie nicht auf das Internet zugreifen müssen, um Ihre SDK-Konfiguration herunterzuladen
App 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")
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, die durch Realtime Database-Ereignisse ausgelöst werden, ist keine zusätzliche Einrichtung erforderlich. Wenn die Realtime Database- und Cloud Functions-Emulatoren beide ausgeführt werden, arbeiten sie automatisch zusammen.
Admin SDKs
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 Ihr Admin SDK Code eine Verbindung zu einem freigegebenen Emulator herstellen soll, der in
einer anderen Umgebung ausgeführt wird, müssen Sie die 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.
Admin-SDK für Node.js
admin.initializeApp({ projectId: "your-project-id" });
Umgebungsvariable
export GCLOUD_PROJECT="your-project-id"
Datenbank zwischen Tests leeren
Wenn Sie die Realtime Database zwischen Aktivitäten leeren möchten, können Sie die Datenbankreferenz löschen. Dieser Ansatz ist eine Alternative zum einfachen Herunterfahren des Emulatorprozesses.
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);
Ihr Code sollte natürlich auf eine Bestätigung warten, dass das Leeren abgeschlossen ist oder fehlgeschlagen ist. Verwenden Sie dazu die Funktionen zur asynchronen Ereignisverarbeitung Ihrer Plattform.
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 Testkonfiguration verwenden.
Daten importieren und exportieren
Mit den Emulatoren für die Realtime Database und Cloud Storage for Firebase können Sie Daten aus einer aktiven Emulatorinstanz exportieren. Definieren Sie einen Basissatz von Daten, die in Ihren Unit-Tests oder Continuous Integration-Workflows verwendet werden sollen, und exportieren Sie sie, damit sie für das Team freigegeben werden können.
firebase emulators:export ./dirImportieren Sie in Tests beim Starten des Emulators die Basisdaten.
firebase emulators:start --import=./dirSie 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-exitDiese Optionen zum Importieren und Exportieren von Daten funktionieren auch mit dem Befehl firebase emulators:exec. Weitere Informationen finden Sie in der
Referenz zu Emulatorbefehlen.
Aktivität von Sicherheitsregeln visualisieren
Während Sie Prototypen erstellen und testen, können Sie Visualisierungstools und Berichte verwenden, die von der Local Emulator Suite bereitgestellt werden.
Regelauswertungen visualisieren
Wenn Sie Ihrem Prototyp Sicherheitsregeln hinzufügen, können Sie sie mit Local Emulator Suite Tools debuggen.
Nachdem Sie eine Reihe von Tests ausgeführt haben, können Sie auf Berichte zur Testabdeckung zugreifen, die Aufschluss darüber geben, wie die einzelnen Regeln bewertet wurden. Um die Berichte abzurufen, fragen Sie einen bereitgestellten 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 Teilausdrücke aufgeteilt. Bewegen Sie die Maus auf einen Ausdruck oder Teilausdruck, um weitere Informationen zu erhalten, einschließlich der Anzahl der Ausführungen und der zurückgegebenen Werte. 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>
Nächste Schritte
- Eine Auswahl an Videos und detaillierten Anleitungen finden Sie in der Playlist zum Training von Firebase Emulators.
- Weitere Informationen zu erweiterten Anwendungsfällen für das Testen von Sicherheitsregeln und das Firebase Test SDK finden Sie unter Sicherheitsregeln testen (Realtime Database).
- Da ausgelöste Funktionen eine typische Integration mit Realtime Database sind, finden Sie weitere Informationen zum Cloud Functions for Firebase Emulator unter Funktionen lokal ausführen.