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 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

Installieren Sie zuerst die Firebase CLI, um den Cloud Functions-Emulator zu verwenden:

npm install -g firebase-tools

Damit Sie den lokalen Emulator verwenden können, muss Ihre 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. Eine zusätzliche Einrichtung ist nicht 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. Das 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 das Bereich „Dienstkonten“ der Google Cloud-Konsole.
  2. Achten Sie darauf, dass App Engine-Standarddienstkonto ausgewählt ist, und verwenden Sie das Optionsmenü rechts und wählen Sie Schlüssel erstellen aus.
  3. Wählen Sie auf der nächsten Seite als Schlüsseltyp JSON 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 über das Admin SDK auf Firebase- und Google APIs zugreifen. Beim Testen eines Authentication-Triggers 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 zuerst den Befehl zum Abrufen Ihrer benutzerdefinierten Konfiguration (im Verzeichnis functions ausführen) in Ihrer lokalen Umgebung:

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. Diese basieren 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 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, müssen Sie möglicherweise einige zusätzliche Konfigurationsschritte ausführen.

App für aufrufbare Funktionen instrumentieren

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

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);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1: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 vom lokalen Emulator im folgenden URL-Format bereitgestellt:

http://$HOST:$PORT/$PROJECT/$REGION/$NAME

Zum Beispiel wird eine einfache helloWorld-Funktion mit dem Standard-Hostport und der Standardregion 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 eingereihte 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 Dispositionssystem komplexer ist als das eine im Emulator implementiert. um Produktionsumgebungen genau wiederzugeben. Die Parameter im Emulator gibt Obergrenzen für die Rate an, mit der Aufgaben weitergeleitet werden und es noch einmal versucht.

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

Der Cloud Functions-Emulator unterstützt Hintergrundfunktionen aus den folgenden Quellen:

  • Realtime Database-Emulator
  • Cloud Firestore-Emulator
  • Authentication-Emulator
  • Pub/Sub-Emulator
  • Firebase-Benachrichtigungsemulator

Wenn Sie Hintergrundereignisse auslösen möchten, ändern Sie die Back-End-Ressourcen mithilfe von Emulator Suite UI oder verbinden Sie Ihre App oder Ihren Testcode über das SDK für Ihre Plattform mit den Emulatoren.

Test-Handler für benutzerdefinierte Ereignisse, die von Erweiterungen ausgegeben werden

Für Funktionen, die Sie zur Verarbeitung von benutzerdefinierten Firebase Extensions-Ereignissen implementieren mit Cloud Functions v2, gekoppelt der Cloud Functions-Emulator mit der Unterstützung für Eventarc-Emulator Eventarc-Trigger.

Wenn Sie benutzerdefinierte Event-Handler für Erweiterungen testen möchten, die Ereignisse senden, 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 SDK stellen automatisch eine Verbindung zum Eventarc-Emulator her, wenn die Umgebungsvariable EVENTARC_EMULATOR festgelegt ist. Sie können den Standardport wie unter Local Emulator Suite konfigurieren beschrieben ändern.

Wenn die Umgebungsvariablen richtig konfiguriert sind, sendet Firebase Admin SDK automatisch Ereignisse an den Eventarc-Emulator. Der Eventarc-Emulator führt dann einen Callback an den Cloud Functions-Emulator aus, um alle registrierten Handler auszulösen.

Weitere Informationen finden Sie in den Functions-Logs in der Emulator Suite UI die Ausführung des Handlers.

Interaktionen mit anderen Diensten

Die Emulator-Suite umfasst mehrere Emulatoren, mit denen produktübergreifende Interaktionen testen.

Cloud Firestore

Wenn Sie Funktionen haben, in die über das Firebase Admin SDK geschrieben wird Cloud Firestore, diese Schreibvorgänge werden an den Cloud Firestore-Emulator gesendet wenn sie ausgeführt wird. Wenn durch diese Schreibvorgänge weitere Funktionen ausgelöst werden, Sie werden 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 wenn sie 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 wenn sie 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, enthält die Benutzeroberfläche des Emulators den Tab FireAlerts. So emulieren Sie einen Benachrichtigungstrigger:

  1. Öffnen Sie den Tab FireAlerts. Auf diesem Tab wird ein Dropdown-Menü mit den Benachrichtigungstypen, denen Trigger zugeordnet sind (z. B. wenn Sie „onNewFatalIssuePublished“ ein, ist „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 sind entweder abgeleitete Werte, simulierte Werte oder zufällig generiert).
  3. Wählen Sie Send Alert (Benachrichtigung senden) aus, um eine synthetische Benachrichtigung an den Funktionsemulator zu senden. mit Logging für Benachrichtigungen in der Firebase-Konsole (und in Logs).

Logging

Der Emulator streamt Protokolle von Ihren Funktionen in das Terminalfenster, in dem sie ausgeführt werden. Es werden alle Ausgaben der Anweisungen console.log(), console.info(), console.error() und console.warn() in Ihren Funktionen angezeigt.

Nächste Schritte

Ein vollständiges Beispiel für die Verwendung der Firebase Emulator-Suite finden Sie in der Kurzanleitung zum Testen.