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 Authentifizierung, Echtzeitdatenbank, Cloud Firestore 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 zuerst die Firebase-Befehlszeilenschnittstelle:

npm install -g firebase-tools

Um den lokalen Emulator verwenden zu können, müssen Ihre Cloud-Funktionen von Folgendem abhängen:

  • firebase-admin Version 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 Funktionen 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 verwenden Sie das Optionsmenü rechts, um Schlüssel erstellen auszuwählen.
  3. Wählen Sie bei Aufforderung 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
    

Nachdem Sie diese Schritte ausgeführt haben, 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) .

Konfiguration der Funktionen einrichten (optional)

Wenn Sie Konfigurationsvariablen für benutzerdefinierte Funktionen verwenden, führen Sie zuerst den Befehl aus, um Ihre benutzerdefinierte Konfiguration (im functions auszuführen) 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

Verwenden Sie zum Ausführen des Cloud Functions-Emulators 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 Back-End-Funktionen umfassen , konfigurieren Sie die Interaktion mit dem Cloud Functions for Firebase-Emulator wie folgt:

Android
        // 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://localhost:5001")

Webversion 9

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "localhost", 5001);

Webversion 8

firebase.functions().useEmulator("localhost", 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 standardmäßigen Host-Port und der standardmäßigen Region bereitgestellt werden unter:

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

Instrumentieren Sie Ihre App für die Emulation von Funktionen, die vom Hintergrund ausgelöst werden

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

  • Echtzeit-Datenbank-Emulator
  • Cloud Firestore-Emulator
  • Authentifizierungsemulator
  • Pub/Sub-Emulator

Um Hintergrundereignisse auszulösen, verbinden Sie Ihre App oder Ihren Testcode mit den Emulatoren, indem Sie das SDK für Ihre Plattform verwenden.

Interaktionen mit anderen Diensten

Die Emulator-Suite umfasst mehrere Emulatoren, die das Testen von produktübergreifenden Interaktionen ermöglichen.

Cloud-Firestore

Wenn Sie Cloud Functions haben, die das Firebase Admin SDK verwenden, um in Cloud Firestore zu schreiben, werden diese Schreibvorgänge an den Cloud Firestore-Emulator gesendet, sofern dieser ausgeführt wird. Wenn durch diese Schreibvorgänge weitere Cloud Functions 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.

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 Schnellstartbeispiel zum Testen .