Uruchamianie funkcji lokalnie

Wiersz poleceń Firebase zawiera emulator Cloud Functions, który może emulować te typy funkcji:

  • funkcje HTTPS,
  • funkcje wywoływane,
  • funkcje kolejki zadań,
  • funkcje w tle wyzwalane przez Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, obsługiwane alerty Firebase, i Cloud Pub/Sub.

Funkcje możesz uruchamiać lokalnie, aby je przetestować przed wdrożeniem w środowisku produkcyjnym.

Zainstaluj wiersz poleceń Firebase

Aby korzystać z emulatora Cloud Functions, najpierw zainstaluj wiersz poleceń Firebase:

npm install -g firebase-tools

Aby korzystać z emulatora lokalnego, Cloud Functions muszą zależeć od:

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

Konfigurowanie danych logowania administratora (opcjonalnie)

Jeśli chcesz, aby testy funkcji wchodziły w interakcje z interfejsami API Google lub innymi interfejsami API Firebase za pomocą pakietu Firebase Admin SDK, może być konieczne skonfigurowanie danych logowania administratora.

  • Aktywatory Cloud Firestore i Realtime Database mają już wystarczające dane logowania i nie wymagają dodatkowej konfiguracji.
  • Wszystkie inne interfejsy API, w tym interfejsy API Firebase, takie jak Authentication i FCM, oraz interfejsy API Google, takie jak Cloud Translation lub Cloud Speech, wymagają wykonania czynności opisanych w tej sekcji. Dotyczy to zarówno korzystania z powłoki Cloud Functions, jak i firebase emulators:start.

Aby skonfigurować dane logowania administratora dla emulowanych funkcji:

  1. Otwórz panel Konta usługi w konsoli Google Cloud.
  2. Upewnij się, że jest wybrane App Engine domyślne konto usługi , i użyj menu opcji po prawej stronie, aby wybrać Utwórz klucz.
  3. Gdy pojawi się prośba, wybierz JSON jako typ klucza i kliknij Utwórz.
  4. Ustaw domyślne dane logowania Google, aby 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
    

Po wykonaniu tych czynności testy funkcji mogą uzyskiwać dostęp do interfejsów API Firebase i Google za pomocą pakietu Admin SDK. Na przykład podczas testowania aktywatora Authentication emulowana funkcja może wywołać admin.auth().getUserByEmail(email).

Konfigurowanie funkcji (opcjonalnie)

Jeśli używasz niestandardowych zmiennych konfiguracji funkcji, najpierw uruchom polecenie, aby pobrać konfigurację niestandardową (uruchom je w katalogu functions) w środowisku lokalnym:

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 dla Cloud Functions, Cloud Firestore, Bazy danych czasu rzeczywistego i Hostingu Firebase na podstawie 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 po uruchomieniu emulatorów chcesz uruchomić zestaw testów lub skrypt testowy, użyj polecenia emulators:exec:

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

Instrumentowanie aplikacji do komunikacji z emulatorami

Aby dostosować aplikację do interakcji z emulatorami, może być konieczne przeprowadzenie dodatkowej konfiguracji.

Instrumentowanie aplikacji pod kątem funkcji wywoływalnych

Jeśli prototypowanie i testowanie obejmuje wywoływane funkcje backendu, skonfiguruj interakcję z Cloud Functions for Firebase emulatorem w ten sposób:

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

Instrumentowanie aplikacji do emulacji funkcji HTTPS

Każda funkcja HTTPS w kodzie będzie obsługiwana przez emulator lokalny za pomocą tego formatu adresu URL:

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

Na przykład prosta funkcja helloWorld z domyślnym portem hosta i regionem będzie obsługiwana pod adresem:

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

Instrumentowanie aplikacji do emulacji funkcji kolejki zadań

Emulator automatycznie konfiguruje emulowane kolejki zadań na podstawie definicji aktywatorów, a pakiet Admin SDK przekierowuje żądania w kolejce do emulatora, jeśli wykryje, że jest on uruchomiony za pomocą zmiennej środowiskowej CLOUD_TASKS_EMULATOR_HOST.

Pamiętaj, że system wysyłania używany w środowisku produkcyjnym jest bardziej złożony niż ten zaimplementowany w emulatorze, więc nie należy oczekiwać, że emulowane zachowanie będzie dokładnie odzwierciedlać środowiska produkcyjne. Parametry w emulatorze określają górne granice szybkości, z jaką zadania są wysyłane i ponawiane.

Instrumentowanie aplikacji do emulacji funkcji wyzwalanych w tle

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

  • emulator Realtime Database
  • emulator Cloud Firestore
  • emulator Authentication
  • emulator Pub/Sub
  • emulator alertów Firebase.

Aby wywołać zdarzenia w tle, zmodyfikuj zasoby backendu za pomocą Emulator Suite UI, lub połącz aplikację lub kod testowy z emulatorami za pomocą pakietu SDK dla swojej platformy.

Testowanie obsługi zdarzeń niestandardowych emitowanych przez rozszerzenia

W przypadku funkcji, które implementujesz do obsługi Firebase Extensions zdarzeń niestandardowych za pomocą Cloud Functions w wersji 2, emulator Cloud Functions współpracuje z emulatorem Eventarc, aby obsługiwać aktywatory Eventarc.

Aby testować obsługę zdarzeń niestandardowych w przypadku rozszerzeń, które emitują zdarzenia, musisz zainstalować emulatory Cloud Functions i Eventarc.

Jeśli emulator Eventarc jest uruchomiony, środowisko wykonawcze Cloud Functions ustawia zmienną środowiskową EVENTARC_EMULATOR na localhost:9299 w bieżącym procesie. Pakiety Firebase Admin SDK automatycznie łączą się z emulatorem Eventarc , gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR. Port domyślny możesz zmienić zgodnie z opisem w sekcji Konfigurowanie Local Emulator Suite.

Gdy zmienne środowiskowe są prawidłowo skonfigurowane, Firebase Admin SDK automatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei emulator Eventarc wywołuje emulator Cloud Functions, aby wywołać zarejestrowane obsługi.

Szczegółowe informacje o wykonywaniu obsługi znajdziesz w logach funkcji w Emulator Suite UI w celu uzyskania szczegółowych informacji o wykonywaniu obsługi.

Interakcje z innymi usługami

Pakiet emulatorów zawiera kilka emulatorów, które umożliwiają testowanie interakcji między usługami.

Cloud Firestore

Jeśli masz funkcje, które używają pakietu Firebase Admin SDK do zapisywania w Cloud Firestore, te zapisy będą wysyłane do emulatora Cloud Firestore jeśli jest on uruchomiony. Jeśli te zapisy wywołują kolejne funkcje, będą one uruchamiane w emulatorze Cloud Functions.

Cloud Storage

Jeśli masz funkcje, które używają pakietu Firebase Admin SDK (w wersji 9.7.0 lub nowszej) do zapisywania w Cloud Storage, te zapisy będą wysyłane do emulatora Cloud Storage jeśli jest on uruchomiony. Jeśli te zapisy wywołują kolejne funkcje, będą one uruchamiane w emulatorze Cloud Functions.

Firebase Authentication

Jeśli masz funkcje, które używają pakietu Firebase Admin SDK (w wersji 9.3.0 lub nowszej) do zapisywania w Firebase Authentication, te zapisy będą wysyłane do emulatora Auth jeśli jest on uruchomiony. Jeśli te zapisy wywołują kolejne funkcje, będą one uruchamiane w emulatorze Cloud Functions.

Hosting Firebase

Jeśli używasz Cloud Functions do generowania treści dynamicznych na potrzeby Firebase Hosting, firebase emulators:start używa lokalnych funkcji HTTP jako serwerów proxy na potrzeby hostingu.

Alerty Firebase

W każdym projekcie, który zawiera co najmniej 1 obsługiwany aktywator alertów Firebase, interfejs emulatora zawiera kartę FireAlerts. Aby emulować aktywator alertu:

  1. Otwórz kartę FireAlerts. Na tej karcie wyświetla się menu z typami alertów, które mają powiązane z nimi aktywatory (na przykład jeśli masz aktywator onNewFatalIssuePublished, wyświetla się crashlytics.newFatalIssue).
  2. Wybierz typ alertu. Formularz automatycznie wypełnia się wartościami domyślnymi, które można edytować. Możesz edytować pola zdarzenia (inne informacje ze zdarzenia alertu są wywnioskowane, mają wartości zastępcze lub są generowane losowo).
  3. Kliknij Wyślij alert , aby wysłać syntetyczny alert do emulatora funkcji. Logowanie jest dostępne w sekcji Alerty w konsoli Firebase (a także w logach).

Logowanie

Emulator przesyła strumieniowo logi z funkcji do okna terminala, w którym są one uruchamiane. Wyświetla wszystkie dane wyjściowe z instrukcji console.log(), console.info(), console.error() i console.warn() w funkcjach.

Następne kroki

Pełny przykład użycia pakietu emulatorów Firebase znajdziesz w przewodniku Szybki start.