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 z Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, obsługiwanych alertów Firebase i Cloud Pub/Sub.
Możesz uruchamiać funkcje lokalnie, aby przetestować je 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 korzystać z lokalnego emulatora, Cloud Functions musi zależeć od:
firebase-adminw wersji8.0.0lub nowszej.firebase-functionsw wersji3.0.0lub nowszej.
Konfigurowanie danych logowania administratora (opcjonalnie)
Jeśli chcesz, aby testy funkcji wchodziły w interakcję z interfejsami API Google lub innymi interfejsami API Firebase za pomocą pakietu Firebase Admin SDK, może być konieczne skonfigurowanie danych logowania administratora.
- Wyzwalacze Cloud Firestore i Realtime Database mają już wystarczające uprawnienia 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 czy Cloud Speech, wymagają wykonania czynności konfiguracyjnych 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 domyślne konto usługi App Engine, i użyj menu opcji po prawej stronie, aby wybrać Utwórz klucz.
- Gdy pojawi się prośba, wybierz JSON jako typ klucza 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 funkcjonalne będą mogły uzyskiwać dostęp do Firebase i interfejsów API 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 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 emulatora
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 produktów 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 po uruchomieniu emulatorów chcesz uruchomić zestaw testów lub skrypt testowy, użyj polecenia emulators:exec:
firebase emulators:exec "./my-test.sh"
Po uruchomieniu emulator przesyła strumieniowo logi z funkcji do okna terminala, w którym działa. Wyświetla wszystkie dane wyjściowe z instrukcji console.log(), console.info(), console.error() i console.warn() w funkcjach.
Pamiętaj, że dane wyjściowe emulatora domyślnie symulują wdrażanie funkcji w określonym regionie (us-central1), który może nie odpowiadać domyślnemu regionowi rzeczywistego wdrożenia produkcyjnego. Więcej informacji o regionach znajdziesz w artykule o lokalizacjach Cloud Functions.
Instrumentowanie aplikacji pod kątem komunikacji z emulatorami
Aby instrumentować aplikację do interakcji z emulatorami, może być konieczne wykonanie dodatkowej konfiguracji.
Instrumentowanie aplikacji pod kątem funkcji wywoływalnych
Jeśli działania związane z prototypowaniem i testowaniem obejmują wywoływane funkcje backendu, 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)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance; // Connects to the Functions Emulator running on port 5001 functions.UseFunctionsEmulator("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);
Instrumentowanie aplikacji na potrzeby emulacji funkcji HTTPS
Każda funkcja HTTPS w kodzie będzie obsługiwana przez lokalny emulator w tym formacie 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 na potrzeby emulacji funkcji kolejki zadań
Emulator automatycznie konfiguruje emulowane kolejki zadań na podstawie definicji aktywatorów, a pakiet Admin SDK przekierowuje żądania z kolejki 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 należy oczekiwać, że zachowanie emulowane będzie dokładnie odzwierciedlać środowiska produkcyjne. Parametry w emulatorze określają górne limity częstotliwości wysyłania i ponawiania zadań.
Instrumentacja aplikacji na potrzeby emulacji funkcji wywoływanych w tle
Emulator Cloud Functions obsługuje funkcje aktywowane 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ę bądź kod testowy z emulatorami za pomocą pakietu SDK dla swojej platformy.
Obsługa testów zdarzeń niestandardowych generowanych przez rozszerzenia
W przypadku funkcji, które implementujesz do obsługi zdarzeń niestandardowych Firebase Extensions za pomocą Cloud Functions w wersji 2, emulator Cloud Functions jest sparowany z emulatorem Eventarc, aby obsługiwać aktywatory Eventarc.
Aby przetestować niestandardowe moduły obsługi zdarzeń 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. Gdy zmienna środowiskowa EVENTARC_EMULATOR jest ustawiona, Firebase Admin SDK automatycznie łączą się z emulatorem Eventarc. Możesz zmienić domyślny port, jak opisano 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 aktywować zarejestrowane moduły obsługi.
Szczegółowe informacje o wykonywaniu modułów 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 zapisu w usłudze 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 w usłudze Cloud Storage, te zapisy będą wysyłane do emulatora Cloud Storage, 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 w Firebase Authentication, te zapisy będą wysyłane do emulatora uwierzytelniania, jeśli 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 zawartości dynamicznej dla Firebase Hosting, firebase emulators:start używa lokalnych funkcji HTTP jako serwerów proxy do 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:
- Otwórz kartę FireAlerts. Na tej karcie wyświetla się menu z typami alertów, które mają powiązane aktywatory (np. jeśli masz aktywator onNewFatalIssuePublished, wyświetla 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 (inne informacje ze zdarzenia alertu są wnioskowane, są wartościami próbnymi lub są generowane losowo).
- Kliknij Wyślij alert, aby wysłać alert syntetyczny do emulatora funkcji. Logowanie będzie dostępne w sekcji Alerty w konsoli Firebase (oraz w logach).
Następne kroki
Pełny przykład użycia pakietu emulatorów Firebase znajdziesz w przykładowym krótkim wprowadzeniu do testowania.