Uruchamianie funkcji lokalnie

Interfejs wiersza 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 środowisko produkcyjne.

Instalowanie wiersza poleceń Firebase

Aby używać emulatora Cloud Functions, najpierw zainstaluj interfejs wiersza poleceń Firebase:

npm install -g firebase-tools

Aby korzystać z lokalnego emulatora, Cloud Functions musi zależeć od:

  • 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 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.

  • Aktywatory Cloud Firestore i Realtime Database mają już odpowiednie dane logowania i nie wymagają dodatkowej konfiguracji.
  • Wszystkie inne interfejsy API, w tym interfejsy Firebase API, takie jak Authentication i FCM czy interfejsy API 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. Sprawdź, czy wybrane jest domyślne konto usługi App Engine, i w menu opcji po prawej stronie wybierz Utwórz klucz.
  3. Gdy pojawi się prośba, wybierz typ klucza JSON i kliknij Utwórz.
  4. 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ą mogły uzyskać dostęp do interfejsów API Firebase i Google za pomocą pakietu Admin SDK. Na przykład podczas testowania aktywatora Authentication emulowana funkcja mogła wywołać 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 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.

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+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);

Przeprowadź emulację funkcji HTTPS w aplikacji

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 jest obsługiwana w tym miejscu:

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

Dostosuj aplikację do emulacji funkcji kolejki zadań

Emulator automatycznie konfiguruje emulowane kolejki zadań na podstawie definicji aktywatora, a pakiet Admin SDK przekierowuje do emulatora żądania oczekujące w kolejce, jeśli wykryje, że działa przez zmienną środowiskową CLOUD_TASKS_EMULATOR_HOST.

Pamiętaj, że system wysyłania używany w środowisku produkcyjnym jest bardziej złożony niż system zaimplementowany w emulatorze, więc nie należy oczekiwać, że emulowane działanie będzie dokładnie odzwierciedlać środowiska produkcyjne. Parametry w emulatorze określają górne granice szybkości wysyłania i ponawiania zadań.

Emulacja funkcji wywoływanych w tle

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

  • Realtime Database emulator
  • 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

W przypadku funkcji zaimplementowanych do obsługi zdarzeń niestandardowych Firebase Extensions z użyciem Cloud Functions w wersji 2 emulator Cloud Functions paruje się z emulatorem Eventarc w celu obsługi wyzwalaczy Eventarc.

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

Jeśli emulator Eventarc jest uruchomiony, środowisko wykonawcze Cloud Functions ustawia zmienną środowiskową EVENTARC_EMULATOR na localhost:9299 w bieżącym procesie. Gdy skonfigurowana jest zmienna środowiskowa EVENTARC_EMULATOR, Firebase Admin SDK automatycznie łączy się z emulatorem Eventarc. Port domyślny można zmienić w sposób omówiony w sekcji Konfiguracja Local Emulator Suite.

Gdy zmienne środowiskowe są prawidłowo skonfigurowane, Firebase Admin SDKautomatycznie 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 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 kontekście 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 zapisu w usłudze Firebase Authentication, te zapisy będą wysyłane do emulatora uwierzytelniania, 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 Cloud Functions do generowania zawartości dynamicznej na potrzeby witryny Firebase Hosting, firebase emulators:start używa lokalnych funkcji HTTP jako serwerów proxy na potrzeby 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ć aktywator 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ę opcja crashlytics.newFatalIssue).
  2. Wybierz typ alertu. Formularz automatycznie wypełnia się wartościami domyślnymi, które można edytować. Pola zdarzenia możesz edytować (inne informacje ze zdarzenia alertu są ustalane, symulowane lub generowane losowo).
  3. 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 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.