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, które są wywoływane przez Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, obsługiwane alerty Firebase oraz Cloud Pub/Sub.
Możesz uruchomić funkcje lokalnie, aby je przetestować przed wdrożeniem w środowisku produkcyjnym.
Instalowanie 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 wersji8.0.0
lub nowszej.firebase-functions
w wersji3.0.0
lub nowszej.
Konfiguracja danych logowania administratora (opcjonalnie)
Jeśli chcesz, aby testy funkcji mogły wchodzić w interakcje z usługami Google API lub innymi usługami Firebase za pomocą pakietu SDK Firebase Admin, konieczne może być skonfigurowanie danych logowania administratora.
- Reguły Cloud Firestore i Realtime Database mają już wystarczające dane logowania i nie wymagają dodatkowej konfiguracji.
- Wszystkie pozostałe interfejsy API, w tym interfejsy Firebase, takie jak Authentication i FCM, oraz interfejsy 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:
- Otwórz panel Konta usługi w konsoli Google Cloud.
- Upewnij się, że wybrane jest App Engine domyślne konto usługi, a potem w menu opcji po prawej stronie kliknij 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ć funkcję
admin.auth().getUserByEmail(email)
Konfiguracja funkcji (opcjonalnie)
Jeśli używasz zmiennych konfiguracji funkcji niestandardowych, najpierw uruchom w swoim środowisku lokalnym (w katalogu functions
) ten polecenie, aby uzyskać niestandardową konfigurację:
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
uruchamia emulatory Cloud Functions, Cloud Firestore, Bazy danych czasu rzeczywistego i Firebase Hosting na podstawie usług zainicjowanych w Twoim 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ć zestaw testów lub skrypt testowy po uruchomieniu emulatorów, 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 konfiguracji.
Instrumentowanie aplikacji pod kątem wywoływalnych funkcji
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 hosta i regionem będzie obsługiwana pod adresem:
https://localhost:5001/$PROJECT/us-central1/helloWorld
Przeprowadź emulację funkcji kolejki zadań w aplikacji
Na podstawie definicji wyzwalaczy emulator automatycznie konfiguruje kolejki zadań emulowanych, a pakiet Admin SDK przekierowuje oczekujące żądania do emulatora, jeśli wykryje, że jest on uruchamiany za pomocą zmiennej środowiska 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.
Emulacja funkcji wywoływanych 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
- Pub/Sub emulator
- Emulator alertów Firebase
Aby wywołać zdarzenia w tle, zmodyfikuj zasoby backendu za pomocą Emulator Suite UI lub łącząc aplikację lub kod testowy z emulatorami za pomocą pakietu SDK odpowiedniego dla Twojej platformy.
Testowe moduły obsługi zdarzeń niestandardowych generowane przez rozszerzenia
Dla funkcji zaimplementowanych 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.
Jeśli emulowany jest emulator Eventarc, środowisko wykonawcze Cloud Functions ustawia zmienną środowiskową EVENTARC_EMULATOR
na localhost:9299
w bieżącym procesie. Elementy typu Firebase Admin SDK automatycznie łączą się z Eventarc
w emulatorze, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR
. Możesz zmienić domyślny port zgodnie z opisem w sekcji Konfigurowanie 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.
Szczegółowe informacje o wykonywaniu funkcji znajdziesz w logach funkcji w Emulator Suite UI.
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 te zapisy wywołają dalsze funkcje, zostaną one uruchomione w edytorze 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 te zapisy wywołają dalsze funkcje, zostaną one uruchomione w edytorze 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 te zapisy wywołają dalsze funkcje, zostaną one uruchomione w emulatorze Cloud Functions.
Hosting Firebase
Jeśli używasz Cloud Functions do generowania dynamicznych treści dla Firebase Hosting, firebase emulators:start
używa lokalnych funkcji HTTP jako serwerów proxy do hostingu.
Alerty Firebase
W emulacji interfejsu użytkownika każdego projektu, który zawiera co najmniej 1 obsługiwany przez Firebase alert, dostępna jest karta FireAlerts. Aby emulować regułę alertu:
- Otwórz kartę FireAlerts (Powiadomienia o pożarze). Na tej karcie znajduje się menu z typami alertów, które mają powiązane uruchamiacze (np. jeśli masz uruchomiony uruchamiacz onNewFatalIssuePublished, wyświetli się alert crashlytics.newFatalIssue).
- Wybierz typ alertu. Formularz wypełnia się automatycznie wartościami domyślnymi, można edytować. Możesz edytować pola zdarzenia (inne informacje ze zdarzenia alertu są wywnioskowane, stanowią wartości testowe lub są generowane losowo).
- 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 wykonywane. Wyświetla wszystkie dane wyjściowe instrukcji console.log()
, console.info()
, console.error()
i console.warn()
wewnątrz funkcji.
Następne kroki
Pełny przykład użycia pakietu emulatorów Firebase znajdziesz w krótkiego wprowadzenia do testowania.