Uruchamiaj funkcje lokalnie

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 korzystać z lokalnego emulatora, funkcje w Cloud Functions muszą opierać się na:

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

Konfigurowanie danych logowania administratora (opcjonalnie)

Jeśli chcesz, aby testy funkcji wchodziły w interakcje z interfejsami API Google lub innymi interfejsami Firebase API za pomocą pakietu SDK Firebase Admin, musisz skonfigurować dane logowania administratora.

  • Aktywatory Cloud Firestore i Bazy danych czasu rzeczywistego nie wymagają już dodatkowej konfiguracji i mają już wystarczającą ilość danych logowania.
  • Wszystkie pozostałe interfejsy API, w tym interfejsy API Firebase, takie jak Uwierzytelnianie i FCM lub Google API, np. Cloud Translation lub Cloud Speech, wymagają konfiguracji opisanej w tej sekcji. Dotyczy to zarówno powłoki Cloud Functions, jak i firebase emulators:start.

Aby skonfigurować dane logowania administratora dla emulowanych funkcji:

  1. Otwórz okienko kont usługi w konsoli Google Cloud.
  2. Zaznacz Domyślne konto usługi App Engine i w menu opcji po prawej stronie wybierz Utwórz klucz.
  3. Gdy pojawi się komunikat, jako typ klucza wybierz JSON i kliknij Utwórz.
  4. Ustaw domyślne dane logowania Google, 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
    

Gdy wykonasz te czynności, Twoje testy funkcji będą mogły uzyskać dostęp do interfejsów API Firebase i Google za pomocą pakietu Admin SDK. Na przykład podczas testowania aktywatora uwierzytelniania emulowana funkcja może wywołać metodę admin.auth().getUserByEmail(email).

Konfigurowanie funkcji (opcjonalnie)

Jeśli używasz niestandardowych zmiennych konfiguracji funkcji, najpierw uruchom to 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 uruchamia emulatory Cloud Functions, Cloud Firestore, Bazy danych czasu rzeczywistego i Hostingu Firebase w zależności od usług zainicjowanych w projekcie lokalnym przy użyciu firebase init. Jeśli chcesz uruchomić konkretny emulator, użyj flagi --only:

firebase emulators:start --only functions

Jeśli chcesz uruchomić pakiet testowy lub skrypt testowy po uruchomieniu emulatorów, użyj polecenia emulators:exec:

firebase emulators:exec "./my-test.sh"

Dostosuj aplikację, aby rozmawiać z emulatorami

Aby dostosować aplikację do działania emulatorów, konieczne może być wykonanie dodatkowej konfiguracji.

Dostosuj aplikację pod kątem funkcji wywoływanych

Jeśli Twoje prototypy 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 modular API

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Interfejs API Web Namespaced

firebase.functions().useEmulator("127.0.0.1", 5001);

Dostosuj aplikację do emulacji funkcji HTTPS

Każda funkcja HTTPS w kodzie będzie wywoływana z lokalnego emulatora 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 w:

https://localhost:5001/$PROJECT/us-central1/helloWorld

Dostosuj aplikację pod kątem emulacji funkcji aktywowanych 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 za pomocą interfejsu pakietu emulatorów albo łącząc aplikację lub kod testowy z emulatorami za pomocą pakietu SDK na Twojej platformie.

Testowanie modułów obsługi zdarzeń niestandardowych generowanych przez rozszerzenia

W przypadku funkcji, które implementujesz w celu obsługi niestandardowych zdarzeń Rozszerzeń w Firebase za pomocą Cloud Functions w wersji 2, emulator Cloud Functions łączy się z emulatorem Eventarc, aby obsługiwać aktywatory Eventarc.

Aby przetestować niestandardowe moduły obsługi zdarzeń w przypadku rozszerzeń, które generują zdarzenia, musisz zainstalować emulatory Cloud Functions i Eventarc.

Jeśli działa emulator Eventarc, środowisko wykonawcze Cloud Functions ustawia w bieżącym procesie zmienną środowiskową EVENTARC_EMULATOR na localhost:9299. Po ustawieniu zmiennej środowiskowej EVENTARC_EMULATOR pakiety SDK Firebase Admin automatycznie łączą się z emulatorem Eventarc. Domyślny port możesz zmienić w sposób omówiony w sekcji Konfigurowanie pakietu emulatorów lokalnych.

Gdy zmienne środowiskowe są prawidłowo skonfigurowane, pakiet SDK Firebase Admin automatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei emulator Eventarc wykonuje wywołanie zwrotne do emulatora Cloud Functions, aby aktywować wszystkie zarejestrowane moduły obsługi.

Szczegółowe informacje o wykonywaniu modułu obsługi możesz znaleźć w logach funkcji w interfejsie Pakietu emulatorów.

Interakcje z innymi usługami

Pakiet emulatorów zawiera wiele emulatorów, które umożliwiają testowanie interakcji między usługami.

Cloud Firestore

Jeśli używasz funkcji używających pakietu SDK Firebase Admin do zapisu w Cloud Firestore, te zapisy będą wysyłane do emulatora Cloud Firestore, jeśli jest on uruchomiony. Jeśli te zapisy aktywują dalsze funkcje, będą one uruchamiane w emulatorze Cloud Functions.

Cloud Storage

Jeśli masz funkcje korzystające z pakietu SDK Firebase Admin SDK (w wersji 9.7.0 lub nowszej) do zapisu w Cloud Storage, te zapisy będą wysyłane do emulatora Cloud Storage, jeśli jest on uruchomiony. Jeśli te zapisy aktywują dalsze funkcje, będą one uruchamiane w emulatorze Cloud Functions.

Uwierzytelnianie Firebase

Jeśli używasz funkcji, 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 te zapisy aktywują dalsze funkcje, będą one 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 emulatora Firebase znajdziesz w krótkim wprowadzeniu do testowania (w języku angielskim).