Die Firebase-CLI enthält einen Cloud Functions-Emulator, der die folgenden Funktionstypen emulieren kann:
- HTTPS-Funktionen
- Aufrufbare Funktionen
- Hintergrundfunktionen, die von Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage 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.
Installieren Sie die Firebase-CLI
Um den Cloud Functions-Emulator zu verwenden, installieren Sie zunächst die Firebase-CLI:
npm install -g firebase-tools
Um den lokalen Emulator verwenden zu können, müssen Ihre Cloud-Funktionen von Folgendem abhängen:
-
firebase-admin
8.0.0
oder höher. -
firebase-functions
Version3.0.0
oder höher.
Administratoranmeldeinformationen einrichten (optional)
Wenn Sie möchten, dass Ihre Funktionstests über das Firebase Admin SDK mit Google APIs oder anderen Firebase APIs interagieren, müssen Sie möglicherweise Administratoranmeldeinformationen einrichten.
- Cloud Firestore- und Realtime Database-Trigger verfügen bereits über ausreichende Anmeldeinformationen und erfordern keine zusätzliche Einrichtung.
- Alle anderen APIs, einschließlich Firebase-APIs wie Authentifizierung und FCM oder Google-APIs wie Cloud Translation oder Cloud Speech, erfordern die in diesem Abschnitt beschriebenen Einrichtungsschritte. Dies gilt unabhängig davon, ob Sie die Cloud Functions-Shell oder
firebase emulators:start
verwenden.
So richten Sie Administratoranmeldeinformationen für emulierte Funktionen ein:
- Öffnen Sie den Bereich „Dienstkonten“ der Google Cloud Console.
- Stellen Sie sicher, dass das App Engine-Standarddienstkonto ausgewählt ist, und wählen Sie im Optionsmenü rechts die Option Schlüssel erstellen aus.
- Wenn Sie dazu aufgefordert werden, wählen Sie JSON als Schlüsseltyp aus und klicken Sie auf Erstellen .
Legen Sie Ihre Google-Standardanmeldeinformationen 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
Nach Abschluss dieser Schritte können Ihre Funktionstests mithilfe des Admin SDK auf Firebase- und Google-APIs zugreifen. Beim Testen eines Authentifizierungstriggers könnte die emulierte Funktion beispielsweise admin.auth().getUserByEmail(email)
aufrufen.
Funktionskonfiguration einrichten (optional)
Wenn Sie Konfigurationsvariablen für benutzerdefinierte Funktionen verwenden, führen Sie zunächst den Befehl aus, um Ihre benutzerdefinierte Konfiguration (führen Sie diese im functions
aus) in Ihrer lokalen Umgebung abzurufen:
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
Führen Sie die Emulator-Suite aus
Um den Cloud Functions-Emulator auszuführen, verwenden Sie den Befehl emulators:start
:
firebase emulators:start
Der Befehl emulators:start
startet Emulatoren für Cloud Functions, Cloud Firestore, Realtime Database und Firebase Hosting basierend auf den Produkten, 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 eine Testsuite oder ein Testskript ausführen möchten, nachdem die Emulatoren gestartet wurden, verwenden Sie den Befehl emulators:exec
:
firebase emulators:exec "./my-test.sh"
Instrumentieren Sie Ihre App, um mit den Emulatoren zu kommunizieren
Um Ihre App für die Interaktion mit den Emulatoren zu instrumentieren, müssen Sie möglicherweise einige zusätzliche Konfigurationen vornehmen.
Instrumentieren Sie Ihre App für aufrufbare Funktionen
Wenn Ihre Prototyp- und Testaktivitäten aufrufbare Backend-Funktionen umfassen, konfigurieren Sie die Interaktion mit dem Cloud Functions for Firebase-Emulator wie folgt:
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 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);
Schnell
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")
Web modular API
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
Web namespaced API
firebase.functions().useEmulator("127.0.0.1", 5001);
Instrumentieren Sie Ihre App für die Emulation von HTTPS-Funktionen
Jede HTTPS-Funktion in Ihrem Code wird vom lokalen Emulator unter Verwendung des folgenden URL-Formats bereitgestellt:
http:// $HOST : $PORT / $PROJECT / $REGION / $NAME
Beispielsweise würde eine einfache helloWorld
Funktion mit dem Standard-Host-Port und der Standard-Host-Region bereitgestellt werden unter:
https://localhost:5001/ $PROJECT /us-central1/helloWorld
Instrumentieren Sie Ihre App für die Emulation von im Hintergrund ausgelösten Funktionen
Der Cloud Functions-Emulator unterstützt im Hintergrund ausgelöste Funktionen aus den folgenden Quellen:
- Echtzeit-Datenbankemulator
- Cloud Firestore-Emulator
- Authentifizierungsemulator
- Pub/Sub-Emulator
Um Hintergrundereignisse auszulösen, ändern Sie Back-End-Ressourcen über die Emulator Suite-Benutzeroberfläche oder indem Sie Ihre App oder Ihren Testcode über das SDK für Ihre Plattform mit den Emulatoren verbinden.
Testhandler für benutzerdefinierte Ereignisse, die von Erweiterungen ausgegeben werden
Für Funktionen, die Sie implementieren, um benutzerdefinierte Firebase Extensions-Ereignisse mit Cloud Functions v2 zu verarbeiten, wird der Cloud Functions-Emulator mit dem Eventarc-Emulator gekoppelt, um Eventarc-Trigger zu unterstützen.
Um benutzerdefinierte Ereignishandler für Erweiterungen zu testen, die Ereignisse ausgeben, müssen Sie die Cloud Functions- und Eventarc-Emulatoren installieren.
Die Cloud Functions-Laufzeit legt die Umgebungsvariable EVENTARC_EMULATOR
im aktuellen Prozess auf localhost:9299
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 „Lokale Emulator Suite konfigurieren“ beschrieben ändern.
Wenn Umgebungsvariablen ordnungsgemäß konfiguriert sind, sendet das Firebase Admin SDK automatisch Ereignisse an den Eventarc-Emulator. Der Eventarc-Emulator wiederum ruft den Cloud Functions-Emulator zurück, um alle registrierten Handler auszulösen.
Sie können die Funktionsprotokolle in der Emulator Suite-Benutzeroberfläche auf Details zur Handlerausführung überprüfen.
Interaktionen mit anderen Diensten
Die Emulator-Suite umfasst mehrere Emulatoren, die das Testen produktübergreifender Interaktionen ermöglichen.
Cloud Firestore
Wenn Sie über Funktionen verfügen, die das Firebase Admin SDK zum Schreiben in Cloud Firestore verwenden, werden diese Schreibvorgänge an den Cloud Firestore-Emulator gesendet, sofern dieser ausgeführt wird. Wenn durch diese Schreibvorgänge weitere Funktionen ausgelöst werden, werden diese im Cloud Functions-Emulator ausgeführt.
Cloud-Speicher
Wenn Sie über Funktionen verfügen, die das Firebase Admin SDK (Version 9.7.0 oder höher) zum Schreiben in Cloud Storage verwenden, werden diese Schreibvorgänge an den Cloud Storage-Emulator gesendet, sofern dieser ausgeführt wird. Wenn durch diese Schreibvorgänge weitere Funktionen ausgelöst werden, werden diese im Cloud Functions-Emulator ausgeführt.
Firebase-Authentifizierung
Wenn Sie über Funktionen verfügen, die das Firebase Admin SDK (Version 9.3.0 oder höher) zum Schreiben in die Firebase-Authentifizierung verwenden, werden diese Schreibvorgänge an den Auth-Emulator gesendet, sofern dieser ausgeführt wird. Wenn durch diese Schreibvorgänge weitere Funktionen ausgelöst werden, werden diese 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.
Protokollierung
Der Emulator streamt Protokolle von Ihren Funktionen an das Terminalfenster, wo sie ausgeführt werden. Es zeigt alle Ausgaben der console.log()
, console.info()
, console.error()
und console.warn()
in Ihren Funktionen an.
Nächste Schritte
Ein vollständiges Beispiel für die Verwendung der Firebase-Emulator-Suite finden Sie im Test-Schnellstartbeispiel .