Firebase CLI zawiera emulator Cloud Functions, który może emulować następujące typy funkcji:
- Funkcje HTTPS
- Wywoływalne funkcje
- Funkcje działające w tle uruchamiane z Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage i Cloud Pub/Sub.
Możesz uruchamiać funkcje lokalnie, aby przetestować je przed wdrożeniem w środowisku produkcyjnym.
Zainstaluj interfejs wiersza polecenia Firebase
Aby użyć emulatora Cloud Functions, najpierw zainstaluj Firebase CLI:
npm install -g firebase-tools
Aby korzystać z lokalnego emulatora, Twoje Cloud Functions muszą być zależne od:
-
firebase-admin
w wersji8.0.0
lub nowszej. -
firebase-functions
wersji3.0.0
lub nowszej.
Skonfiguruj poświadczenia administratora (opcjonalnie)
Jeśli chcesz, aby testy funkcji wchodziły w interakcje z interfejsami API Google lub innymi interfejsami API Firebase za pośrednictwem pakietu Firebase Admin SDK , może być konieczne skonfigurowanie danych logowania administratora.
- Wyzwalacze Cloud Firestore i Realtime Database mają już wystarczające dane uwierzytelniające i nie wymagają dodatkowej konfiguracji.
- Wszystkie inne interfejsy API, w tym interfejsy API Firebase, takie jak Uwierzytelnianie i FCM, lub Google API, takie jak Cloud Translation lub Cloud Speech, wymagają 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ć poświadczenia administratora dla emulowanych funkcji:
- Otwórz panel Konta usług w Google Cloud Console.
- Upewnij się, że wybrane jest domyślne konto usługi App Engine , i użyj menu opcji po prawej stronie, aby wybrać opcję Utwórz klucz .
- Po wyświetleniu monitu wybierz JSON jako typ klucza i kliknij Utwórz .
Ustaw domyślne dane logowania Google tak, aby wskazywały pobrany klucz:
Uniks
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase emulators:start
Okna
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 Firebase i Google API za pomocą pakietu Admin SDK . Na przykład podczas testowania wyzwalacza uwierzytelniania emulowana funkcja może wywołać admin.auth().getUserByEmail(email)
.
Skonfiguruj konfigurację funkcji (opcjonalnie)
Jeśli używasz niestandardowych zmiennych konfiguracyjnych funkcji, najpierw uruchom polecenie, aby uzyskać niestandardową konfigurację (uruchom to 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
Uruchom pakiet emulatorów
Aby uruchomić emulator Cloud Functions, użyj polecenia emulators:start
:
firebase emulators:start
Komenda emulators:start
uruchomi emulatory Cloud Functions, Cloud Firestore, Realtime Database i Firebase Hosting na podstawie produktów zainicjowanych w lokalnym projekcie przy użyciu 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"
Przygotuj swoją aplikację do komunikowania się z emulatorami
Aby instrumentować aplikację do interakcji z emulatorami, może być konieczne wykonanie dodatkowej konfiguracji.
Instrumentuj swoją aplikację pod kątem funkcji, które można wywoływać
Jeśli Twoje działania prototypowe i testowe obejmują wywoływalne funkcje zaplecza , skonfiguruj interakcję z emulatorem Cloud Functions for Firebase w następujący 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);
Szybki
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
Web version 9
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "localhost", 5001);
Web version 8
firebase.functions().useEmulator("localhost", 5001);
Przygotuj swoją aplikację do emulacji funkcji HTTPS
Każda funkcja HTTPS w twoim kodzie będzie obsługiwana z lokalnego emulatora przy użyciu następującego formatu adresu URL:
http:// $HOST : $PORT / $PROJECT / $REGION / $NAME
Na przykład prosta funkcja helloWorld
z domyślnym portem hosta i regionem byłaby obsługiwana w:
https://localhost:5001/ $PROJECT /us-central1/helloWorld
Przygotuj swoją aplikację do emulacji funkcji wyzwalanych w tle
Emulator Cloud Functions obsługuje funkcje uruchamiane w tle z następujących źródeł:
- Emulator bazy danych czasu rzeczywistego
- Emulator Cloud Firestore
- Emulator uwierzytelniania
- Emulator Pub/Sub
Aby wyzwalać zdarzenia w tle, zmodyfikuj zasoby zaplecza za pomocą interfejsu użytkownika Emulator Suite lub łącząc aplikację lub kod testowy z emulatorami za pomocą zestawu SDK dla swojej platformy.
Programy obsługi testów dla zdarzeń niestandardowych emitowanych przez rozszerzenia
W przypadku funkcji, które zaimplementujesz do obsługi niestandardowych zdarzeń Firebase Extensions za pomocą Cloud Functions v2, emulator Cloud Functions łączy się w parę z emulatorem Eventarc, aby obsługiwać wyzwalacze Eventarc .
Aby przetestować niestandardowe procedury obsługi zdarzeń dla 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 emulator Eventarc jest uruchomiony. Pakiety SDK Firebase Admin automatycznie łączą się z emulatorem Eventarc, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR
. Domyślny port można zmodyfikować zgodnie z opisem w sekcji Konfigurowanie pakietu lokalnych emulatorów .
Gdy zmienne środowiskowe są prawidłowo skonfigurowane, pakiet Firebase Admin SDK automatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei emulator Eventarc odwołuje się do emulatora Cloud Functions, aby uruchomić zarejestrowane moduły obsługi.
Możesz sprawdzić dzienniki funkcji w interfejsie użytkownika pakietu emulatorów, aby uzyskać szczegółowe informacje na temat wykonywania programu obsługi.
Interakcje z innymi usługami
Pakiet emulatorów zawiera wiele emulatorów, które umożliwiają testowanie interakcji między produktami.
Cloud Firestore
Jeśli masz funkcje korzystające z Firebase Admin SDK do zapisywania w Cloud Firestore, te zapisy będą wysyłane do emulatora Cloud Firestore, jeśli jest uruchomiony. Jeśli te zapisy uruchomią dalsze funkcje, zostaną one uruchomione w emulatorze Cloud Functions.
Magazyn w chmurze
Jeśli masz funkcje korzystające z pakietu Firebase Admin SDK (wersja 9.7.0 lub nowsza) do zapisywania w Cloud Storage, te zapisy będą wysyłane do emulatora Cloud Storage, jeśli jest on uruchomiony. Jeśli te zapisy uruchomią dalsze funkcje, zostaną one uruchomione w emulatorze Cloud Functions.
Uwierzytelnianie Firebase
Jeśli masz funkcje korzystające z pakietu Firebase Admin SDK (wersja 9.3.0 lub nowsza) do zapisywania w uwierzytelnianiu Firebase, te zapisy zostaną wysłane do emulatora Auth, jeśli jest uruchomiony. Jeśli te zapisy uruchomią dalsze funkcje, zostaną one uruchomione w emulatorze Cloud Functions.
Hosting Firebase
Jeśli używasz Cloud Functions do generowania zawartości dynamicznej dla Hostingu Firebase , firebase emulators:start
używają lokalnych funkcji HTTP jako serwerów proxy do hostowania.
Logowanie
Emulator przesyła strumieniowo logi z twoich funkcji do okna terminala, w którym są uruchamiane. Wyświetla wszystkie dane wyjściowe console.log()
, console.info()
, console.error()
i console.warn()
wewnątrz twoich funkcji.
Następne kroki
Aby zapoznać się z pełnym przykładem korzystania z pakietu emulatorów Firebase, zapoznaj się z testowym krótkim wprowadzeniem .