Wiersz 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 produkcję.
Instalowanie wiersza poleceń Firebase
Aby korzystać z emulatora Cloud Functions, najpierw zainstaluj wiersz poleceń Firebase:
npm install -g firebase-tools
Aby można było 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.
- 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. Dotyczy to zarówno powłoki Cloud Functions, jak i
firebase emulators:start
.
Aby skonfigurować dane logowania administratora dla funkcji emulowanych:
- 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. Podczas testowania np. Authentication, emulowana funkcja może wywołać admin.auth().getUserByEmail(email)
.
Konfiguracja funkcji (opcjonalnie)
Jeśli używasz zmiennych konfiguracji funkcji niestandardowych, najpierw uruchom w swoim środowisku lokalnym komendę, aby uzyskać niestandardową konfigurację (uruchom ją w katalogu functions
):
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"
Przeprowadź testy aplikacji z użyciem emulatorów
Aby umożliwić aplikacji interakcję z emulatorami, może być konieczne 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
// 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 Twoim kodzie będzie obsługiwana przez lokalny emulator przy użyciu tego 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
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 działa on za pomocą zmiennej środowiska CLOUD_TASKS_EMULATOR_HOST
.
Pamiętaj, że system wysyłania używany w produkcji jest bardziej złożony niż ten zaimplementowany w emulatorze, więc nie należy oczekiwać, że emulowane działanie będzie dokładnie odzwierciedlać środowisko produkcyjne. Parametry w emulatorze określają górną granicę szybkości, z jaką zadania są wysyłane i powtarzane.
Emulacja funkcji wywoływanych w tle
Emulator Cloud Functions obsługuje funkcje wywoływane w tle z tych źródeł:
- Realtime Database emulator
- Cloud Firestore emulator
- Authentication emulator
- 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.
testować obsługi zdarzeń niestandardowych emitowanych przez rozszerzenia.
W przypadku funkcji implementowanych do obsługi zdarzeń niestandardowych Firebase Extensions w wersji 2.0 Cloud Functions emuluje emulację Eventarc, aby obsługiwać aktywatorów Eventarc.Cloud Functions
Aby przetestować obsługę zdarzeń niestandardowych w przypadku rozszerzeń, które emitują zdarzenia, musisz zainstalować emulatory 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. Firebase Admin SDK automatycznie łączą się z emulatorem Eventarc, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR
. Możesz zmienić domyślny port zgodnie z instrukcjami w sekcji Konfigurowanie Local Emulator Suite.
Gdy zmienne środowiskowe są prawidłowo skonfigurowane, Firebase Admin SDKautomatycznie wysyła zdarzenia do emulatora Eventarc. Następnie emulowany Eventarc wywołuje emulowany Cloud Functions, aby wywołać zarejestrowane moduły.
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 pliku 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 zapisywania danych w tabeli Firebase Authentication, te operacje zapisu zostaną wysłane do emulatora Auth, 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 usługi Cloud Functions do generowania dynamicznych treści dla usługi Firebase Hosting, usługa firebase emulators:start
używa funkcji lokalnego HTTP jako serwerów proxy do hostowania.
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 uruchomiciel onNewFatalIssuePublished, wyświetli się crashlytics.newFatalIssue).
- Wybierz typ alertu. Formularz automatycznie wypełnia się wartościami domyślnymi, które można edytować. Możesz edytować pola zdarzenia (inne informacje ze zdarzenia alertu są wywnioskowane, stanowią wartości testowe lub są 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 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ładowym pakiecie testowym.