Interfejs wiersza polecenia Firebase zawiera emulator Cloud Functions, który może emulować następujące typy funkcji:
- Funkcje HTTPS
- Funkcje wywoływalne
- Funkcje w tle uruchamiane z uwierzytelniania Firebase, bazy danych czasu rzeczywistego, Cloud Firestore, Cloud Storage i Cloud Pub/Sub.
Możesz uruchamiać funkcje lokalnie, aby je przetestować przed wdrożeniem w środowisku produkcyjnym.
Zainstaluj interfejs wiersza polecenia Firebase
Aby korzystać z emulatora Cloud Functions, najpierw zainstaluj interfejs CLI Firebase:
npm install -g firebase-tools
Aby móc korzystać z lokalnego emulatora, Twoje funkcje Cloud Functions muszą zależeć 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 Twoje testy funkcji współdziałały 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 interfejsy API Google, takie jak Cloud Translation lub Cloud Speech, wymagają kroków 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 typ klucza JSON i kliknij opcję Utwórz .
Ustaw domyślne dane uwierzytelniające Google, aby wskazywały pobrany klucz:
Uniksa
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 kroków testy funkcji uzyskają dostęp do interfejsów API Firebase i Google 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 zmiennych konfiguracyjnych funkcji niestandardowych, najpierw uruchom komendę, aby uzyskać niestandardową konfigurację (uruchom ją 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
Polecenie emulators:start
uruchomi emulatory Cloud Functions, Cloud Firestore, Realtime Database i Firebase Hosting w oparciu o produkty zainicjowane w lokalnym projekcie za pomocą 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"
Instrumentuj swoją aplikację, aby komunikowała się z emulatorami
Aby przygotować aplikację do interakcji z emulatorami, może być konieczne wykonanie dodatkowej konfiguracji.
Instrumentuj swoją aplikację pod kątem funkcji wywoływalnych
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().useFunctionsEmulator(origin: "http://127.0.0.1:5001")
Web modular API
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
Web namespaced API
firebase.functions().useEmulator("127.0.0.1", 5001);
Instrumentuj swoją aplikację pod kątem 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 będzie obsługiwana pod adresem:
https://localhost:5001/ $PROJECT /us-central1/helloWorld
Instrumentuj aplikację pod kątem 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 pakietu Emulator Suite lub łącząc aplikację lub kod testowy z emulatorami za pomocą zestawu SDK dla swojej platformy.
Testuj procedury obsługi zdarzeń niestandardowych emitowanych przez rozszerzenia
W przypadku funkcji, które zaimplementowałeś 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ń emitujących zdarzenia, należy 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. Zestawy SDK Firebase Admin automatycznie łączą się z emulatorem Eventarc, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR
. Możesz zmodyfikować port domyślny, jak opisano w sekcji Konfigurowanie pakietu emulatorów lokalnych .
Gdy zmienne środowiskowe są prawidłowo skonfigurowane, pakiet Firebase Admin SDK automatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei emulator Eventarc wywołuje ponownie emulator Cloud Functions, aby uruchomić dowolne zarejestrowane procedury obsługi.
Możesz sprawdzić dzienniki funkcji w interfejsie użytkownika pakietu emulatora, aby uzyskać szczegółowe informacje na temat wykonywania procedury obsługi.
Interakcje z innymi usługami
Zestaw emulatorów zawiera wiele emulatorów, które umożliwiają testowanie interakcji między produktami.
Chmura Firestore
Jeśli masz funkcje korzystające z pakietu Firebase Admin SDK do zapisu w Cloud Firestore, zapisy te zostaną wysłane do emulatora Cloud Firestore, jeśli jest on uruchomiony. Jeśli w wyniku tych zapisów zostaną uruchomione 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 zapisu w Cloud Storage, te zapisy zostaną wysłane do emulatora Cloud Storage, jeśli jest on uruchomiony. Jeśli w wyniku tych zapisów zostaną uruchomione 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 zapisu w usłudze Firebase Authentication, zapisy te zostaną wysłane do emulatora Auth, jeśli jest on uruchomiony. Jeśli w wyniku tych zapisów zostaną uruchomione 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 dla hostingu.
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
Pełny przykład korzystania z pakietu emulatorów Firebase można znaleźć w przykładzie szybkiego startu dotyczącym testowania .