Funktionen lokal ausführen

Die Firebase CLI enthält einen Cloud Functions-Emulator, mit dem die folgenden Funktionstypen emuliert werden können:

  • HTTPS-Funktionen
  • Aufrufbare Funktionen
  • Funktionen für Aufgabenwarteschlangen
  • Hintergrundfunktionen, die durch Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, unterstützte Firebase-Benachrichtigungen und Cloud Pub/Sub ausgelöst werden.

Sie können Funktionen lokal ausführen, um sie vor der Bereitstellung in der Produktion zu testen.

Firebase CLI installieren

Wenn Sie den Cloud Functions-Emulator verwenden möchten, müssen Sie zuerst die Firebase CLI installieren:

npm install -g firebase-tools

Damit Sie den lokalen Emulator verwenden können, muss Ihr Cloud Functions von Folgendem abhängen:

  • firebase-admin-Version 8.0.0 oder höher.
  • firebase-functions-Version 3.0.0 oder 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.

  • Für Cloud Firestore- und Realtime Database-Trigger sind bereits ausreichende Anmeldedaten vorhanden und es ist keine zusätzliche Einrichtung erforderlich.
  • 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. Dies gilt unabhängig davon, ob Sie die Cloud Functions-Shell oder firebase emulators:start verwenden.

So richten Sie Administratoranmeldedaten für emulierte Funktionen ein:

  1. Öffnen Sie in der Google Cloud-Konsole den Bereich „Dienstkonten“.
  2. Achten Sie darauf, dass App Engine Standarddienstkonto ausgewählt ist, und wählen Sie im Optionsmenü rechts Schlüssel erstellen aus.
  3. Wählen Sie bei der Aufforderung JSON als Schlüsseltyp aus und klicken Sie auf Erstellen.
  4. Legen Sie Ihre 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, kann die emulierte Funktion admin.auth().getUserByEmail(email) aufrufen.

Funktionskonfiguration einrichten (optional)

Wenn Sie Konfigurationsvariablen für benutzerdefinierte Funktionen verwenden, führen Sie zuerst den folgenden Befehl aus, um die 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 Befehl emulators:start, 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 gestartet, 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"

App für die Kommunikation mit den Emulatoren instrumentieren

Damit Ihre App mit den Emulatoren interagieren kann, ist möglicherweise eine zusätzliche Konfiguration erforderlich.

App für aufrufbare Funktionen instrumentieren

Wenn Ihr Prototyp und Ihre Testaktivitäten aufrufbare Backend-Funktionen umfassen, konfigurieren Sie die Interaktion mit dem Cloud Functions for Firebase-Emulator so:

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 Adresse bereitgestellt:

https://localhost:5001/$PROJECT/us-central1/helloWorld

App für die Emulation von Task-Queue-Funktionen 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.

Das in der Produktion verwendete Dispatch-System ist komplexer als das im Emulator implementierte. Daher sollten Sie nicht erwarten, dass das emulierte Verhalten genau dem in Produktionsumgebungen entspricht. Die Parameter im Emulator legen Obergrenzen für die Rate fest, mit der Aufgaben weitergeleitet und wiederholt werden.

App für die Emulation von durch den Hintergrund ausgelösten Funktionen instrumentieren

Der Cloud Functions-Emulator unterstützt durch den Hintergrund ausgelöste Funktionen aus den folgenden Quellen:

  • Realtime Database-Emulator
  • Cloud Firestore-Emulator
  • Authentication-Emulator
  • Pub/Sub-Emulator
  • Emulator für Firebase-Benachrichtigungen

Wenn Sie Hintergrundereignisse auslösen möchten, ändern Sie die Backend-Ressourcen mit der 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 von Firebase Extensions-Benutzerereignissen mit Cloud Functions v2 implementieren, wird der Cloud Functions-Emulator mit dem Eventarc-Emulator gekoppelt, um Eventarc-Trigger zu unterstützen.

Wenn Sie benutzerdefinierte Event-Handler 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 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 ändern, wie unter Local Emulator Suite konfigurieren beschrieben.

Wenn die Umgebungsvariablen richtig konfiguriert sind, sendet 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.

In den Funktionslogs in Emulator Suite UI finden Sie Details zur Ausführung des Handlers.

Interaktionen mit anderen Diensten

Die Emulator-Suite umfasst mehrere Emulatoren, mit denen produktübergreifende Interaktionen getestet werden können.

Cloud Firestore

Wenn Sie Funktionen haben, die das Firebase Admin SDK verwenden, um in Cloud Firestore zu schreiben, werden diese Schreibvorgänge an den Cloud Firestore-Emulator gesendet, sofern 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 das Firebase Admin SDK (Version 9.7.0 oder höher) verwenden, um in Cloud Storage zu schreiben, werden diese Schreibvorgänge an den Cloud Storage-Emulator gesendet, sofern 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 das Firebase Admin SDK (Version 9.3.0 oder höher) verwenden, um in Firebase Authentication zu schreiben, werden diese Schreibvorgänge an den Auth-Emulator gesendet, sofern 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 generierenfirebase emulators:start, werden Ihre lokalen HTTP-Funktionen als Proxys für das Hosting verwendet.

Firebase-Benachrichtigungen

In jedem Projekt, das mindestens einen unterstützten Firebase-Benachrichtigungstrigger enthält, ist in der Emulator-Benutzeroberfläche der Tab FireAlerts verfügbar. So simulieren Sie einen Benachrichtigungstrigger:

  1. Öffnen Sie den Tab FireAlerts (Brandmeldungen). Auf diesem Tab wird ein Drop-down-Menü mit den Alarmtypen angezeigt, denen Trigger zugeordnet sind. Wenn Sie beispielsweise einen „onNewFatalIssuePublished“-Trigger haben, wird „crashlytics.newFatalIssue“ angezeigt.
  2. Wählen Sie einen Benachrichtigungstyp aus. Das Formular wird automatisch mit Standardwerten ausgefüllt, die bearbeitet werden können. Sie können die Felder des Ereignisses bearbeiten. Andere Informationen aus dem Benachrichtigungsereignis werden entweder abgeleitet, sind Mock-Werte oder werden zufällig generiert.
  3. Wählen Sie Benachrichtigung senden aus, um eine synthetische Benachrichtigung an den Funktions-Emulator zu senden. Die Protokollierung ist in der Firebase-Konsole unter Benachrichtigungen (sowie in den Logs) verfügbar.

Logging

Der Emulator streamt Logs von Ihren Funktionen in das Terminalfenster, in dem sie ausgeführt werden. Sie zeigt die gesamte Ausgabe 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.