Wiersz poleceń Firebase zawiera emulator Cloud Functions, który może emulować te typy funkcji:
- Funkcje HTTPS
- Funkcje wywoływalne
- Funkcje kolejki zadań
- Funkcje działające 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.
Instalowanie wiersza poleceń Firebase
Aby używać emulatora Cloud Functions, najpierw zainstaluj wiersz poleceń Firebase:
npm install -g firebase-tools
Aby korzystać z lokalnego emulatora, Cloud Functions musi zależeć od:
firebase-admin
w wersji8.0.0
lub nowszej.firebase-functions
w wersji3.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.
- Triggery Cloud Firestore i Realtime Database mają już wystarczające dane logowania i nie wymagają dodatkowej konfiguracji.
- Wszystkie inne interfejsy API, w tym interfejsy Firebase API, takie jak Authentication i FCM, lub interfejsy Google API, takie jak Cloud Translation czy Cloud Speech, wymagają wykonania czynności opisanych w tej sekcji. Dotyczy to zarówno powłoki Cloud Functions, jak i
firebase emulators:start
.
Aby skonfigurować dane logowania administratora dla emulowanych funkcji:
- Otwórz panel Konta usługi w konsoli Google Cloud.
- Upewnij się, że wybrane jest App Engine domyślne konto usługi, a następnie w menu opcji po prawej stronie wybierz Utwórz klucz.
- Gdy pojawi się odpowiedni komunikat, wybierz typ klucza JSON i kliknij Utwórz.
Ustaw domyślne dane logowania Google tak, 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 będą mogły 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 zmiennych konfiguracji funkcji niestandardowych, najpierw uruchom to polecenie, aby uzyskać 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 Cloud Functions, Cloud Firestore, Bazy danych czasu rzeczywistego i Hostingu Firebase na podstawie usług zainicjowanych w projekcie lokalnym za pomocą polecenia firebase
init
. Jeśli chcesz uruchomić konkretny emulator, użyj flagi --only
:
firebase emulators:start --only functions
Jeśli chcesz uruchomić pakiet testów lub skrypt testowy po uruchomieniu emulatorów, użyj polecenia emulators:exec
:
firebase emulators:exec "./my-test.sh"
Dostosuj aplikację, aby komunikowała się z emulatorami
Aby skonfigurować aplikację do interakcji z emulatorami, może być konieczne przeprowadzenie dodatkowej konfiguracji.
Dostosowywanie aplikacji do funkcji wywoływanych
Jeśli prototyp i testy obejmują funkcje backendu, które można wywoływać, skonfiguruj interakcję z emulatorem Cloud Functions for Firebase 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);
Dostosowywanie aplikacji do emulacji funkcji HTTPS
Każda funkcja HTTPS w Twoim kodzie będzie obsługiwana z lokalnego emulatora przy użyciu 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
Dostosowywanie aplikacji do emulacji funkcji kolejki zadań
Emulator automatycznie konfiguruje emulowane kolejki zadań na podstawie definicji wyzwalaczy, a pakiet Admin SDK przekierowuje żądania umieszczone w kolejce do emulatora, jeśli wykryje, że działa on 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 oczekuj, że emulowane zachowanie będzie dokładnie odzwierciedlać środowiska produkcyjne. Parametry w emulatorze określają górne limity szybkości wysyłania i ponawiania zadań.
Dostosowywanie aplikacji do emulacji funkcji wywoływanych w tle
Emulator Cloud Functions obsługuje funkcje wywoływane w tle z tych źródeł:
- Realtime Database emulator
- Cloud Firestore emulator
- Authentication emulator
- Pub/Sub emulator
- Emulator alertów Firebase
Aby wywoływać zdarzenia w tle, zmodyfikuj zasoby backendu za pomocą Emulator Suite UIlub połącz aplikację lub kod testowy z emulatorami za pomocą pakietu SDK dla swojej platformy.
Testowanie modułów obsługi zdarzeń niestandardowych emitowanych przez rozszerzenia
W przypadku funkcji, które implementujesz do obsługi Firebase Extensionszdarzeń niestandardowych w Cloud Functionswersji 2, emulator Cloud Functions współpracuje z emulatorem Eventarc, aby obsługiwać aktywatory Eventarc.
Aby przetestować moduły obsługi zdarzeń niestandardowych w przypadku rozszerzeń, które emitują zdarzenia, musisz zainstalować emulatory Cloud Functions i Eventarc.
Środowisko wykonawcze Cloud Functions ustawia zmienną środowiskową EVENTARC_EMULATOR
na localhost:9299
w bieżącym procesie, jeśli działa emulator Eventarc. Firebase Admin SDK automatycznie łączą się z emulatorem Eventarc, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR
. Możesz zmodyfikować domyślny port zgodnie z opisem w sekcji Konfigurowanie Local Emulator Suite.
Gdy zmienne środowiskowe są prawidłowo skonfigurowane, Firebase Admin SDKautomatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei emulator Eventarc wysyła wywołanie zwrotne do emulatora Cloud Functions, aby wywołać zarejestrowane moduły.
Szczegółowe informacje o wykonywaniu funkcji obsługi znajdziesz w logach funkcji w Emulator Suite UI.
Interakcje z innymi usługami
Pakiet emulatorów zawiera wiele 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 danych w Cloud Firestore, te zapisy będą wysyłane do emulatora Cloud Firestore, jeśli jest on uruchomiony. Jeśli te zapisy wywołają kolejne funkcje, zostaną one uruchomione 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 danych w Cloud Storage, te zapisy będą wysyłane do Cloud Storage emulatora, jeśli jest on uruchomiony. Jeśli te zapisy wywołają kolejne funkcje, zostaną one uruchomione 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 danych w Firebase Authentication, zapisy te będą wysyłane do emulatora Auth pod warunkiem, że jest on uruchomiony. Jeśli te zapisy wywołają kolejne funkcje, zostaną one uruchomione w emulatorze Cloud Functions.
Hosting Firebase
Jeśli używasz Cloud Functions do generowania treści dynamicznychFirebase 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 wyzwalacz alertu Firebase, interfejs emulatora zawiera kartę FireAlerts. Aby zasymulować wywołanie alertu:
- Otwórz kartę FireAlerts. Na tej karcie znajduje się menu, w którym wyświetlają się typy alertów powiązane z aktywatorami (np. jeśli masz aktywator onNewFatalIssuePublished, wyświetli się crashlytics.newFatalIssue).
- Wybierz typ alertu. Formularz zostanie automatycznie wypełniony wartościami domyślnymi, które można edytować. Możesz edytować pola zdarzenia (pozostałe informacje ze zdarzenia alertu są wywnioskowane, mają wartości symulacyjne lub są generowane losowo).
- Kliknij Wyślij alert, aby wysłać syntetyczny alert do emulatora funkcji. Dzienniki będą dostępne w sekcji Alerty w konsoli Firebase (a także w dziennikach).
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 korzystania z pakietu emulatorów Firebase znajdziesz w przykładowym kodzie umożliwiającym szybkie rozpoczęcie testowania.