Uruchamianie funkcji lokalnie

Interfejs wiersza poleceń Firebase zawiera emulator Cloud Functions, który może emulować interfejs następujące typy funkcji:

  • Funkcje HTTPS
  • Funkcje wywoływane
  • Funkcje kolejki zadań
  • Funkcje działające w tle wywoływane z tych aplikacji: Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, obsługiwane alerty Firebase, i Cloud Pub/Sub.

Możesz uruchomić funkcje lokalnie, aby je przetestować przed wdrożeniem w środowisku produkcyjnym.

Instalowanie interfejsu wiersza poleceń Firebase

Aby używać emulatora Cloud Functions, najpierw zainstaluj interfejs wiersza poleceń Firebase:

npm install -g firebase-tools

Aby można było używać lokalnego emulatora, Cloud Functions musi spełniać te warunki:

  • firebase-admin w wersji 8.0.0 lub nowszej.
  • firebase-functions w wersji 3.0.0 lub nowszej.

Skonfiguruj dane logowania administratora (opcjonalnie)

Jeśli chcesz, aby testy funkcji działały z interfejsami API Google lub innymi Firebase interfejsów API poprzez pakiet SDK Firebase Admin. dane logowania administratora.

  • Aktywatory Cloud Firestore i Realtime Database mają już odpowiednie dane logowania i nie wymagają dodatkowej konfiguracji.
  • Wszystkie inne interfejsy API, w tym interfejsy Firebase API, np. Authentication i FCM oraz interfejsy API Google, takie jak Cloud Translation czy Cloud Speech, wymagają wykonania czynności konfiguracyjnych opisanych w tej sekcji. Ma to zastosowanie niezależnie od tego, czy używasz powłoki Cloud Functions, czy firebase emulators:start.

Aby skonfigurować dane logowania administratora na potrzeby emulowanych funkcji:

  1. Otwórz aplikację Panel Konta usługi konsoli Google Cloud.
  2. Wybierz App Engine domyślne konto usługi i użyj otwórz menu opcji po prawej stronie i wybierz Utwórz klucz.
  3. Gdy pojawi się prośba, wybierz typ klucza JSON i kliknij Utwórz.
  4. Ustaw swoje domyślne dane logowania Google, by wskazywały pobrany klucz:

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

Gdy wykonasz te czynności, testy funkcjonalne będą miały dostęp do Firebase, interfejsów API Google przy użyciu pakietu Admin SDK, Na przykład podczas testowania aktywatora Authentication, emulowana funkcja może wywołać funkcję admin.auth().getUserByEmail(email)

Skonfiguruj funkcje (opcjonalnie)

Jeśli używasz zmiennych konfiguracji funkcji niestandardowych, najpierw uruchom polecenie pobrania konfiguracji niestandardowej (uruchom je w katalogu functions) w Twoim lokalnym środowisku:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

Uruchamianie pakietu emulatorów

Aby uruchomić emulator Cloud Functions, użyj polecenia emulators:start:

firebase emulators:start

Polecenie emulators:start uruchomi emulatory instancji Cloud Functions, Oparte na Cloud Firestore, Bazie danych czasu rzeczywistego i Hostingu Firebase w przypadku produktów zainicjowanych w projekcie lokalnym za pomocą: firebase init. Jeśli chcesz uruchomić konkretny emulator, użyj flagi --only:

firebase emulators:start --only functions

Jeśli chcesz uruchomić pakiet testowy lub skrypt testowy po tym, jak emulatory rozpoczęte, użyj polecenia emulators:exec:

firebase emulators:exec "./my-test.sh"

Dostosuj aplikację do emulatorów

Aby dostosować aplikację do interakcji z emulatorami, konieczne może być wykonanie kilku dodatkowych ustawień.

Dostosuj aplikację pod kątem funkcji wywoływanych

Jeśli prototyp i działania testowe obejmują możliwe wywołania funkcji backendu, skonfiguruj interakcję z emulatorem Cloud Functions for Firebase w ten sposób:

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

Dostosuj aplikację do emulacji funkcji HTTPS

Każda funkcja HTTPS w kodzie będzie obsługiwana przez lokalny emulator przy użyciu adresu URL w tym formacie:

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

Na przykład prosta funkcja helloWorld z domyślnym portem i regionem hosta jest obsługiwana w tym miejscu:

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

Dostosuj aplikację do emulacji funkcji kolejki zadań

Emulator automatycznie konfiguruje emulowane kolejki zadań na podstawie aktywatora. a pakiet Admin SDK przekierowuje żądania z kolejki do emulatora, Wykrywa, że działa przez środowisko CLOUD_TASKS_EMULATOR_HOST .

Pamiętaj, że system dyspozycyjny używany w środowisku produkcyjnym jest bardziej złożony niż został zaimplementowany w emulatorze, więc nie należy oczekiwać, że zostanie ona emulowana. w celu dokładnego odzwierciedlenia środowisk produkcyjnych. Parametry w parametrze emulator wskazuje górne granice szybkości wysyłania zadań i spróbowałem ponownie.

Dostosuj aplikację do emulacji funkcji wyzwalanych w tle

Emulator Cloud Functions obsługuje funkcje wywoływane w tle z tych źródeł:

  • Emulator usługi Realtime Database
  • Emulator usługi Cloud Firestore
  • Emulator usługi Authentication
  • Emulator usługi Pub/Sub
  • Emulator alertów Firebase

Aby aktywować zdarzenia w tle, zmodyfikuj zasoby backendu za pomocą Emulator Suite UI albo przez połączenie aplikacji lub kodu testowego z emulatorami używanie pakietu SDK na Twojej platformie.

Testowe moduły obsługi zdarzeń niestandardowych generowane przez rozszerzenia

Dla funkcji, które implementujesz do obsługi zdarzeń niestandardowych Firebase Extensions z Cloud Functions v2, emulator Cloud Functions paruje z parametrem Obsługa emulatora Eventarc Aktywatory Eventarc.

Aby przetestować niestandardowe moduły obsługi zdarzeń w przypadku rozszerzeń, które emitują zdarzenia, musisz zainstalować z emulatorów Cloud Functions i Eventarc.

Środowisko wykonawcze Cloud Functions ustawia środowisko EVENTARC_EMULATOR na localhost:9299 w bieżącym procesie, jeśli emulator Eventarc jest uruchomiony. Elementy typu Firebase Admin SDK automatycznie łączą się z Eventarc w emulatorze, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR. Dostępne opcje zmień port domyślny w sposób omówiony w sekcji Konfiguracja Local Emulator Suite.

Po prawidłowym skonfigurowaniu zmiennych środowiskowych interfejs Firebase Admin SDK automatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei Eventarc wysyła wywołanie do emulatora Cloud Functions, aby aktywować zarejestrowanych modułów obsługi.

Logi funkcji znajdziesz w Emulator Suite UI, aby dowiedzieć się więcej: i wykonania modułu obsługi.

Interakcje z innymi usługami

Pakiet emulatorów zawiera wiele emulatorów, które umożliwiają testowania interakcji z różnymi usługami.

Cloud Firestore

Jeśli masz funkcje, które korzystają z pakietu SDK Firebase Admin do zapisu Cloud Firestore, te zapisy zostaną wysłane do emulatora Cloud Firestore , jeśli jest uruchomiony. Jeśli przez te zapisy zostaną aktywowane kolejne funkcje, zostaną uruchomione w emulatorze Cloud Functions.

Cloud Storage

Jeśli masz funkcje korzystające z pakietu Firebase Admin SDK (w wersji 9.7.0 lub nowszej) w celu zapisu w Cloud Storage, te zapisy zostaną wysłane do emulatora Cloud Storage , jeśli jest uruchomiony. Jeśli przez te zapisy zostaną aktywowane kolejne funkcje, zostaną uruchomione w emulatorze Cloud Functions.

Firebase Authentication

Jeśli masz funkcje korzystające z pakietu Firebase Admin SDK (w wersji 9.3.0 lub nowszej) w celu zapisu w Firebase Authentication, te zapisy zostaną wysłane do emulatora uwierzytelniania , jeśli jest uruchomiony. Jeśli przez te zapisy zostaną aktywowane kolejne funkcje, zostaną uruchomione w emulatorze Cloud Functions.

Hosting Firebase

Jeśli używasz Cloud Functions do generowania zawartości dynamicznej dla Firebase Hosting/firebase emulators:start korzysta z lokalnych funkcji HTTP jako serwerów proxy na potrzeby hostingu.

Alerty Firebase

W każdym projekcie zawierającym co najmniej jeden obsługiwany aktywator alertów Firebase, Interfejs emulatora zawiera kartę FireAlerts. Aby emulować aktywator alertu:

  1. Otwórz kartę FireAlerts (Alerty pożarowe). Wyświetlane na niej menu zawiera typów alertów, z którymi powiązane są aktywatory (jeśli na przykład aktywator onNewFatalIssuepublish, a następnie Crashlytics.newFatalIssue jest ).
  2. Wybierz typ alertu. Formularz automatycznie wypełnia się wartościami domyślnymi, można edytować. Możesz edytować pola zdarzenia (inne informacje ze zdarzenia alertu są wnioskowane, fikcyjne lub generowanych losowo).
  3. Wybierz Wyślij alert, aby wysłać alert syntetyczny do emulatora funkcji. z logowaniem dostępnym w Alertach w konsoli Firebase (a także w dziennikach).

Logowanie

Emulator przesyła strumieniowo logi z funkcji do okna terminala, bieganie. Wyświetla wszystkie dane wyjściowe z console.log(), console.info(), instrukcji console.error() i console.warn() w funkcjach.

Następne kroki

Pełny przykład użycia pakietu emulatorów Firebase znajdziesz w krótkiego wprowadzenia do testowania.