Interfejs wiersza poleceń Firebase zawiera emulator Cloud Functions, który może emulować te typy funkcji:
- Funkcje HTTPS
- Funkcje wywoływane
- funkcje działające w tle, aktywowane przez Uwierzytelnianie Firebase, Bazę danych czasu rzeczywistego, Cloud Firestore, Cloud Storage i Cloud Pub/Sub;
Możesz uruchomić funkcje lokalnie, aby je przetestować 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 można było używać lokalnego emulatora, funkcje w Cloud Functions muszą zależeć od tych czynników:
firebase-admin
w wersji8.0.0
lub nowszej.firebase-functions
w wersji3.0.0
lub nowszej.
Skonfiguruj dane logowania administratora (opcjonalnie)
Jeśli chcesz, aby testy funkcji działały z interfejsami API Google lub innymi interfejsami API Firebase za pomocą pakietu SDK Firebase Admin, konieczne może być skonfigurowanie danych logowania administratora.
- Aktywatory Cloud Firestore i Bazy danych czasu rzeczywistego mają już wystarczające dane logowania i nie wymagają dodatkowej konfiguracji.
- Wszystkie pozostałe interfejsy API, w tym interfejsy Firebase API, np. Authentication i FCM oraz interfejsy API Google, takie jak Cloud Translation czy Cloud Speech, wymagają wykonania kroków konfiguracji 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 wybrana jest opcja 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ą dostępne dla Firebase i interfejsów API Google za pomocą pakietu Admin SDK. Na przykład podczas testowania aktywatora uwierzytelniania, emulowana funkcja może wywoływać metodę admin.auth().getUserByEmail(email)
.
Skonfiguruj funkcje (opcjonalnie)
Jeśli używasz zmiennych konfiguracji funkcji niestandardowych, najpierw uruchom polecenie, 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
Uruchamianie pakietu emulatorów
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 usług zainicjowanych w lokalnym projekcie za pomocą 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.
Dostosuj aplikację pod kątem funkcji wywoływanych
Jeśli Twój prototyp i działania testowe obejmują wywoływane funkcje backendu, skonfiguruj interakcję z emulatorem Cloud Functions dla 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 i regionem hosta byłaby obsługiwana w tym miejscu:
https://localhost:5001/$PROJECT/us-central1/helloWorld
Dostosuj aplikację do emulacji funkcji wyzwalanych w tle
Emulator Cloud Functions obsługuje funkcje aktywowane w tle z tych źródeł:
- Emulator Bazy danych czasu rzeczywistego
- Emulator Cloud Firestore
- Emulator uwierzytelniania
- Emulator Pub/Sub
Aby aktywować zdarzenia w tle, zmodyfikuj zasoby backendu, korzystając z interfejsu Pakietu emulatorów albo łącząc aplikację lub kod testowy z emulatorami przy użyciu pakietu SDK przeznaczonego na Twoją platformę.
Testowe moduły obsługi zdarzeń niestandardowych generowane przez rozszerzenia
W przypadku funkcji zaimplementowanych do obsługi zdarzeń niestandardowych Rozszerzeń w Firebase w Cloud Functions w wersji 2 emulator Cloud Functions łączy się z emulatorem Eventarc w celu obsługi wyzwalaczy Eventarc.
Aby przetestować niestandardowe moduły obsługi zdarzeń pod kątem 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 Firebase Admin SDK automatycznie łączą się z emulatorem Eventarc po ustawieniu zmiennej środowiskowej EVENTARC_EMULATOR
. Port domyślny można zmienić w sposób omówiony w artykule Konfigurowanie Pakietu emulatorów lokalnych.
Po prawidłowym skonfigurowaniu zmiennych środowiskowych pakiet Firebase Admin SDK automatycznie 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 modułu obsługi możesz sprawdzić w logach funkcji w interfejsie pakietu emulatorów.
Interakcje z innymi usługami
Ten pakiet zawiera wiele emulatorów, które umożliwiają testowanie interakcji między usługami.
Cloud Firestore
Jeśli Twoje funkcje korzystają z pakietu SDK Firebase Admin do zapisywania w Cloud Firestore, te zapisy zostaną wysłane do emulatora Cloud Firestore, jeśli jest uruchomiony. Jeśli kolejne funkcje zostaną aktywowane przez te zapisy, będą uruchamiane w emulatorze Cloud Functions.
Cloud Storage
Jeśli masz funkcje, które korzystają z pakietu Firebase Admin SDK (w wersji 9.7.0 lub nowszej) do zapisywania w Cloud Storage, te zapisy zostaną wysłane do emulatora Cloud Storage, jeśli jest uruchomiony. Jeśli kolejne funkcje zostaną aktywowane przez te zapisy, będą uruchamiane w emulatorze Cloud Functions.
Uwierzytelnianie Firebase
Jeśli masz funkcje, które korzystają z pakietu Firebase Admin SDK (w wersji 9.3.0 lub nowszej) do zapisu w Uwierzytelnianiu Firebase, te zapisy będą wysyłane do emulatora uwierzytelniania, jeśli jest on uruchomiony. Jeśli kolejne funkcje zostaną aktywowane przez te zapisy, będą uruchamiane w emulatorze Cloud Functions.
Hosting Firebase
Jeśli używasz Cloud Functions do generowania zawartości dynamicznej na potrzeby Hostingu Firebase, firebase emulators:start
używa lokalnych funkcji HTTP jako serwerów proxy do hostingu.
Logowanie
Emulator przesyła strumieniowo logi z funkcji do okna terminala, w którym są uruchamiane. 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.