Interfejs wiersza poleceń Firebase zawiera emulator Cloud Functions, który może emulować te 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 uruchamiać funkcje lokalnie, aby przetestować je przed wdrożeniem na środowisko produkcyjne.
Instalowanie 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-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 interakcję z usługami Google API lub innymi usługami Firebase za pomocą pakietu SDK Firebase Admin, konieczne może być skonfigurowanie danych 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, takie jak Authentication i FCM czy 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:
- Otwórz panel Konta usługi w konsoli Google Cloud.
- Sprawdź, czy wybrane jest domyślne konto usługi App Engine, i w menu opcji po prawej stronie wybierz Utwórz klucz.
- Gdy pojawi się prośba, wybierz typ klucza JSON i kliknij Utwórz.
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 funkcji będą mogły uzyskać dostęp do interfejsów API Firebase i Google za pomocą pakietu Admin SDK. Na przykład podczas testowania aktywatora Authentication emulowana funkcja mogła wywołać 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 po uruchomieniu emulatorów chcesz uruchomić pakiet testowy lub skrypt testowy, 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 dodatkowej konfiguracji.
Instrumentowanie aplikacji pod kątem wywoływalnych funkcji
Jeśli w prototypie i testach występują wyzwalane funkcje zaplecza, 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);
Przeprowadź emulację funkcji HTTPS w aplikacji
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 definicji aktywatora, a pakiet Admin SDK przekierowuje do emulatora żądania oczekujące w kolejce, jeśli wykryje, że działa przez zmienną środowiskową CLOUD_TASKS_EMULATOR_HOST
.
Pamiętaj, że system wysyłania używany w środowisku produkcyjnym jest bardziej złożony niż system zaimplementowany w emulatorze, więc nie należy oczekiwać, że emulowane działanie będzie dokładnie odzwierciedlać środowiska produkcyjne. Parametry w emulatorze określają górne granice szybkości wysyłania i ponawiania zadań.
Emulacja funkcji wywoływanych w tle
Emulator Cloud Functions obsługuje funkcje wywoływane w tle z tych źródeł:
- Realtime Database emulator
- 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
W przypadku funkcji zaimplementowanych do obsługi zdarzeń niestandardowych Firebase Extensions z użyciem Cloud Functions w wersji 2 emulator Cloud Functions paruje się z emulatorem Eventarc w celu obsługi wyzwalaczy Eventarc.
Aby przetestować niestandardowe moduły obsługi zdarzeń dla 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 skonfigurowana jest zmienna środowiskowa EVENTARC_EMULATOR
, Firebase Admin SDK automatycznie łączy się z emulatorem Eventarc. Port domyślny można zmienić w sposób omówiony w sekcji Konfiguracja Local Emulator Suite.
Gdy zmienne środowiskowe są prawidłowo skonfigurowane, Firebase Admin SDKautomatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei emulator Eventarc wywołuje z powrotem do emulatora Cloud Functions, aby aktywować wszystkie zarejestrowane moduły 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 kilka emulatorów, które umożliwiają testowanie interakcji między usługami.
Cloud Firestore
Jeśli masz funkcje, które korzystają z pakietu Firebase Admin SDK do zapisywania danych w kontekście Cloud Firestore, te operacje zapisu zostaną wysłane do emulatora Cloud Firestore, jeśli jest uruchomiony. Jeśli te zapisy wywołają dalsze funkcje, zostaną one uruchomione w emulatorze Cloud Functions.
Cloud Storage
Jeśli masz funkcje, które korzystają z pakietu Admin SDK Firebase (w wersji 9.7.0 lub nowszej) do zapisywania danych w Cloud Storage, te operacje zapisu zostaną wysłane do emulatora Cloud Storage, jeśli jest uruchomiony. Jeśli te zapisy wywołają dalsze funkcje, zostaną one uruchomione w emulatorze Cloud Functions.
Firebase Authentication
Jeśli masz funkcje, które korzystają z pakietu Firebase Admin SDK (w wersji 9.3.0 lub nowszej) do zapisu w usłudze Firebase Authentication, te zapisy będą wysyłane do emulatora uwierzytelniania, jeśli jest on 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 zawartości dynamicznej na potrzeby witryny Firebase Hosting, firebase emulators:start
używa lokalnych funkcji HTTP jako serwerów proxy na potrzeby 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ć aktywator 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ę opcja crashlytics.newFatalIssue).
- Wybierz typ alertu. Formularz automatycznie wypełnia się wartościami domyślnymi, które można edytować. Pola zdarzenia możesz edytować (inne informacje ze zdarzenia alertu są ustalane, symulowane lub generowane losowo).
- Wybierz 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 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ładzie krótkiego wprowadzenia do testowania.