Funktionen lokal ausführen

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 Version 3.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:

  1. Öffnen Sie den Bereich „Dienstkonten“ der Google Cloud Console.
  2. Stellen Sie sicher, dass das App Engine-Standarddienstkonto ausgewählt ist, und wählen Sie im Optionsmenü rechts die Option Schlüssel erstellen aus.
  3. Wenn Sie dazu aufgefordert werden, wählen Sie JSON als Schlüsseltyp aus und klicken Sie auf Erstellen .
  4. 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 .