Uruchamianie funkcji lokalnie

Interfejs wiersza poleceń Firebase zawiera emulator Cloud Functions, który może emulować interfejs następujące 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 uruchomić funkcje lokalnie, aby je przetestować przed wdrożeniem w środowisku produkcyjnym.

Instalowanie 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, Cloud Functions musi spełniać te warunki:

  • firebase-admin w wersji 8.0.0 lub nowszej.
  • firebase-functions w wersji 3.0.0 lub nowszej.

Konfiguracja danych logowania administratora (opcjonalnie)

Jeśli chcesz, aby testy funkcji mogły wchodzić w interakcje 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 FirestoreRealtime Database mają już wystarczające dane logowania i nie wymagają dodatkowej konfiguracji.
  • Wszystkie pozostałe interfejsy API, w tym interfejsy Firebase, takie jak AuthenticationFCM, oraz interfejsy 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:

  1. Otwórz panel Konta usługi w konsoli Google Cloud.
  2. Upewnij się, że wybrane jest App Engine domyślne konto usługi, a potem w menu opcji po prawej stronie kliknij Utwórz klucz.
  3. Gdy pojawi się odpowiedni komunikat, wybierz typ klucza JSON i kliknij Utwórz.
  4. 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. Na przykład podczas testowania aktywatora Authentication, emulowana funkcja może wywołać funkcję 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 chcesz uruchomić zestaw testów lub skrypt testowy po uruchomieniu emulatorów, 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 kilku dodatkowych konfiguracji.

Instrumentowanie aplikacji pod kątem wywoływalnych funkcji

Jeśli prototyp i działania testowe obejmują możliwe wywołania funkcji backendu, 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);

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 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 jest on uruchamiany za pomocą zmiennej środowiska CLOUD_TASKS_EMULATOR_HOST.

Pamiętaj, że system dyspozycyjny używany w środowisku produkcyjnym jest bardziej złożony niż został zaimplementowany w emulatorze, więc nie należy oczekiwać, że zostanie ona emulowana. w celu dokładnego odzwierciedlenia środowisk produkcyjnych. Parametry w parametrze emulator wskazuje górne granice szybkości wysyłania zadań i spróbowałem ponownie.

Emulacja funkcji wywoływanych w tle

Emulator Cloud Functions obsługuje funkcje wywoływane w tle z tych źródeł:

  • Emulator usługi Realtime Database
  • 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

Dla funkcji zaimplementowanych do obsługi zdarzeń niestandardowych Firebase Extensions z Cloud Functions v2, emulator Cloud Functions paruje z parametrem Obsługa emulatora Eventarc Aktywatory Eventarc.

Aby przetestować niestandardowe moduły obsługi zdarzeń w przypadku rozszerzeń, które emitują zdarzenia, musisz zainstalować z emulatorów 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. Elementy typu Firebase Admin SDK automatycznie łączą się z Eventarc w emulatorze, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR. Możesz zmienić domyślny port zgodnie z opisem w sekcji Konfigurowanie Local Emulator Suite.

Po prawidłowym skonfigurowaniu zmiennych środowiskowych interfejs Firebase Admin SDK automatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei Eventarc wysyła wywołanie do emulatora Cloud Functions, aby aktywować zarejestrowanych modułów 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 wiele emulatorów, które umożliwiają testowania interakcji z różnymi usługami.

Cloud Firestore

Jeśli masz funkcje, które korzystają z pakietu SDK Firebase Admin do zapisu Cloud Firestore, te zapisy zostaną wysłane do emulatora Cloud Firestore , jeśli jest uruchomiony. Jeśli te zapisy wywołają dalsze funkcje, zostaną one uruchomione w edytorze Cloud Functions.

Cloud Storage

Jeśli masz funkcje korzystające z pakietu Firebase Admin SDK (w wersji 9.7.0 lub nowszej) w celu zapisu w Cloud Storage, te zapisy zostaną wysłane do emulatora Cloud Storage , jeśli jest uruchomiony. Jeśli te zapisy wywołają dalsze funkcje, zostaną one uruchomione w edytorze Cloud Functions.

Firebase Authentication

Jeśli masz funkcje korzystające z pakietu Firebase Admin SDK (w wersji 9.3.0 lub nowszej) w celu zapisu w Firebase Authentication, te zapisy zostaną wysłane do emulatora uwierzytelniania , jeśli jest 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 dynamicznych treści dla Firebase Hosting, firebase emulators:start używa lokalnych funkcji HTTP jako serwerów proxy do 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ć regułę alertu:

  1. 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ę alert crashlytics.newFatalIssue).
  2. Wybierz typ alertu. Formularz wypełnia się automatycznie wartościami domyślnymi, można edytować. Możesz edytować pola zdarzenia (inne informacje ze zdarzenia alertu są wywnioskowane, stanowią wartości testowe lub są generowane losowo).
  3. Kliknij 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()console.warn() wewnątrz funkcji.

Następne kroki

Pełny przykład użycia pakietu emulatorów Firebase znajdziesz w krótkiego wprowadzenia do testowania.