Die Firebase CLI enthält einen Cloud Functions Emulator, der die folgenden Funktionstypen emulieren kann:
- HTTPS-Funktionen
- Aufrufbare Funktionen
- Aufgabenwarteschlangenfunktionen
- Hintergrundfunktionen, die von Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, unterstützten Firebase-Benachrichtigungen, und Cloud Pub/Sub ausgelöst werden
Sie können Funktionen lokal ausführen, um sie zu testen, bevor Sie sie in der Produktion bereitstellen.
Firebase CLI installieren
Wenn Sie den Cloud Functions Emulator verwenden möchten, installieren Sie zuerst die Firebase CLI:
npm install -g firebase-tools
Damit Sie den lokalen Emulator verwenden können, müssen Ihre Cloud Functions von Folgendem abhängen:
firebase-adminVersion8.0.0oder höherfirebase-functionsVersion3.0.0oder höher
Administratoranmeldedaten einrichten (optional)
Wenn Ihre Funktionstests über das Firebase Admin SDK mit Google APIs oder anderen Firebase APIs interagieren sollen, müssen Sie möglicherweise Administratoranmeldedaten einrichten.
- Cloud Firestore und Realtime Database Trigger haben bereits ausreichende Anmeldedaten und erfordern keine zusätzliche Einrichtung.
- Für alle anderen APIs, einschließlich Firebase APIs wie Authentication und FCM oder Google APIs wie Cloud Translation oder Cloud Speech, sind die in diesem Abschnitt beschriebenen Einrichtungsschritte erforderlich. Das gilt unabhängig davon, ob Sie die Cloud Functions Shell oder
firebase emulators:startverwenden.
So richten Sie Administratoranmeldedaten für emulierte Funktionen ein :
- Öffnen Sie den Bereich Dienstkonten der Google Cloud Console.
- Achten Sie darauf, dass App Engine Standarddienstkonto ausgewählt ist, und verwenden Sie das Optionsmenü rechts, um Schlüssel erstellen auszuwählen.
- Wählen Sie bei Aufforderung JSON als Schlüsseltyp aus und klicken Sie auf Erstellen.
Legen Sie die Google-Standardanmeldedaten so fest, dass sie auf den heruntergeladenen Schlüssel verweisen:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase emulators:start
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase emulators:start
Nachdem Sie diese Schritte ausgeführt haben, können Ihre Funktionstests mit dem Admin SDK auf Firebase- und
Google APIs zugreifen. Wenn Sie beispielsweise einen
Authentication Trigger testen, könnte die emulierte Funktion
admin.auth().getUserByEmail(email) aufrufen.
Funktionskonfiguration einrichten (optional)
Wenn Sie benutzerdefinierte Konfigurationsvariablen für Funktionen verwenden, führen Sie zuerst den Befehl aus, um Ihre benutzerdefinierte Konfiguration in Ihrer lokalen Umgebung abzurufen. Führen Sie diesen Befehl im Verzeichnis functions aus:
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
Emulator Suite ausführen
Verwenden Sie den emulators:start Befehl, um den Cloud Functions Emulator auszuführen:
firebase emulators:start
Mit dem Befehl emulators:start werden Emulatoren für Cloud Functions,
Cloud Firestore, Realtime Database und Firebase Hosting basierend
auf den Produkten gestartet, die Sie in Ihrem lokalen Projekt mit firebase
init initialisiert haben. Wenn Sie einen bestimmten Emulator starten möchten, verwenden Sie das Flag --only:
firebase emulators:start --only functions
Wenn Sie nach dem Starten der Emulatoren eine Test-Suite oder ein Testskript ausführen möchten, verwenden Sie den Befehl emulators:exec:
firebase emulators:exec "./my-test.sh"
App für die Kommunikation mit den Emulatoren instrumentieren
Wenn Sie Ihre App für die Interaktion mit den Emulatoren instrumentieren möchten, müssen Sie möglicherweise einige zusätzliche Konfigurationen vornehmen.
App für aufrufbare Funktionen instrumentieren
Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val functions = Firebase.functions functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFunctions functions = FirebaseFunctions.getInstance(); functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
Web
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
Web
firebase.functions().useEmulator("127.0.0.1", 5001);
App für die Emulation von HTTPS-Funktionen instrumentieren
Jede HTTPS-Funktion in Ihrem Code wird über den lokalen Emulator mit dem folgenden URL-Format bereitgestellt:
http://$HOST:$PORT/$PROJECT/$REGION/$NAME
Eine einfache helloWorld-Funktion mit dem Standardhostport und der Standardregion wird beispielsweise unter folgender URL bereitgestellt:
https://localhost:5001/$PROJECT/us-central1/helloWorld
App für die Emulation von Aufgabenwarteschlangenfunktionen instrumentieren
Der Emulator richtet automatisch emulierte Aufgabenwarteschlangen basierend auf Triggerdefinitionen ein. Das Admin SDK leitet in die Warteschlange gestellte Anfragen an den Emulator weiter, wenn es erkennt, dass er über die Umgebungsvariable CLOUD_TASKS_EMULATOR_HOST ausgeführt wird.
Beachten Sie, dass das in der Produktion verwendete Dispatch-System komplexer ist als das im Emulator implementierte. Sie sollten daher nicht erwarten, dass das emulierte Verhalten Produktionsumgebungen genau widerspiegelt. Die Parameter im Emulator legen Obergrenzen für die Rate fest, mit der Aufgaben gesendet und wiederholt werden.
App für die Emulation von durch Hintergrundereignisse ausgelösten Funktionen instrumentieren
Der Cloud Functions Emulator unterstützt durch Hintergrundereignisse ausgelöste Funktionen aus den folgenden Quellen:
- Realtime Database Emulator
- Cloud Firestore Emulator
- Authentication Emulator
- Pub/Sub-Emulator
- Firebase-Benachrichtigungs-Emulator
Wenn Sie Hintergrundereignisse auslösen möchten, ändern Sie Back-End-Ressourcen über die Emulator Suite UI, oder verbinden Sie Ihre App oder Ihren Testcode mit den Emulatoren über das SDK für Ihre Plattform.
Handler für benutzerdefinierte Ereignisse testen, die von Erweiterungen ausgegeben werden
Für Funktionen, die Sie zur Verarbeitung Firebase Extensions benutzerdefinierter Ereignisse mit Cloud Functions v2 implementieren, wird der Cloud Functions Emulator mit dem Eventarc-Emulator kombiniert, um Eventarc-Trigger zu unterstützen.
Wenn Sie benutzerdefinierte Ereignishandler für Erweiterungen testen möchten, die Ereignisse ausgeben, müssen Sie die Cloud Functions und Eventarc-Emulatoren installieren.
Die Cloud Functions Laufzeit legt die EVENTARC_EMULATOR Umgebungsvariable auf localhost:9299 im aktuellen Prozess fest, wenn der Eventarc-Emulator ausgeführt wird. Die Firebase Admin SDKs stellen automatisch eine Verbindung zum Eventarc
Emulator her, wenn die Umgebungsvariable EVENTARC_EMULATOR festgelegt ist. Sie können den Standardport wie unter Konfigurieren Local Emulator Suiteändern.
Wenn die Umgebungsvariablen richtig konfiguriert sind, sendet das Firebase Admin SDK automatisch Ereignisse an den Eventarc-Emulator. Der Eventarc Emulator ruft dann den Cloud Functions Emulator auf, um alle registrierten Handler auszulösen.
Details zur Handler-Ausführung finden Sie in den Functions-Logs in der Emulator Suite UI für Details zu
Interaktionen mit anderen Diensten
Die Emulator Suite umfasst mehrere Emulatoren, mit denen Sie produktübergreifende Interaktionen testen können.
Cloud Firestore
Wenn Sie Funktionen haben, die mit dem Firebase Admin SDK in Cloud Firestore schreiben, werden diese Schreibvorgänge an den Cloud Firestore Emulator gesendet, wenn er ausgeführt wird. Wenn durch diese Schreibvorgänge weitere Funktionen ausgelöst werden, werden sie im Cloud Functions Emulator ausgeführt.
Cloud Storage
Wenn Sie Funktionen haben, die mit dem Firebase Admin SDK (Version 9.7.0 oder höher) in Cloud Storage schreiben, werden diese Schreibvorgänge an den Cloud Storage-Emulator gesendet, wenn er ausgeführt wird. Wenn durch diese Schreibvorgänge weitere Funktionen ausgelöst werden, werden sie im Cloud Functions Emulator ausgeführt.
Firebase Authentication
Wenn Sie Funktionen haben, die mit dem Firebase Admin SDK (Version 9.3.0 oder höher) in Firebase Authentication schreiben, werden diese Schreibvorgänge an den Authentication-Emulator gesendet, wenn er ausgeführt wird. Wenn durch diese Schreibvorgänge weitere Funktionen ausgelöst werden, werden sie im Cloud Functions Emulator ausgeführt.
Firebase Hosting
Wenn Sie Cloud Functions verwenden, um dynamische Inhalte für
Firebase Hosting zu generieren, verwendet firebase emulators:start
Ihre lokalen HTTP-Funktionen als Proxys für das Hosting.
Firebase-Benachrichtigungen
In jedem Projekt, das mindestens einen unterstützten Firebase-Benachrichtigungstrigger enthält, ist in der Emulator-UI der Tab FireAlerts verfügbar. So emulieren Sie einen Benachrichtigungstrigger:
- Öffnen Sie den Tab FireAlerts. Auf diesem Tab wird ein Drop-down-Menü mit den Benachrichtigungstypen angezeigt, denen Trigger zugeordnet sind. Wenn Sie beispielsweise einen onNewFatalIssuePublished-Trigger haben, wird „crashlytics.newFatalIssue“ angezeigt.
- Wählen Sie einen Benachrichtigungstyp aus. Das Formular wird automatisch mit Standardwerten gefüllt, die bearbeitet werden können. Sie können die Felder des Ereignisses bearbeiten. Andere Informationen aus dem Benachrichtigungsereignis werden entweder abgeleitet, als Mock-Werte verwendet oder zufällig generiert.
- Wählen Sie Benachrichtigung senden aus, um eine synthetische Benachrichtigung an den Functions-Emulator zu senden. Die Logs sind in der Firebase Console unter Benachrichtigungen sowie in den Logs verfügbar.
Logging
Der Emulator streamt Logs von Ihren Funktionen an das Terminalfenster, in dem sie ausgeführt werden. Er zeigt alle Ausgaben von console.log(), console.info(), console.error() und console.warn()-Anweisungen in Ihren Funktionen an.
Nächste Schritte
Ein vollständiges Beispiel für die Verwendung der Firebase Emulator Suite finden Sie im Beispiel für die Kurzanleitung zum Testen.