Eseguire le funzioni localmente

L'interfaccia a riga di comando di Firebase include un Cloud Functions emulatore che può emulare i seguenti tipi di funzioni:

  • Funzioni HTTPS
  • Funzioni richiamabili
  • Funzioni della coda di attività
  • Funzioni in background attivate da Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, avvisi Firebase supportati, e Cloud Pub/Sub.

Puoi eseguire le funzioni localmente per testarle prima di eseguire il deployment in produzione.

Installa l'interfaccia a riga di comando di Firebase

Per utilizzare l'emulatore Cloud Functions, devi prima installare l'interfaccia a riga di comando di Firebase:

npm install -g firebase-tools

Per utilizzare l'emulatore locale, le Cloud Functions devono dipendere da:

  • firebase-admin versione 8.0.0 o successive.
  • firebase-functions versione 3.0.0 o successive.

Configura le credenziali di amministratore (facoltativo)

Se vuoi che i test delle funzioni interagiscano con le API di Google o altre API di Firebase tramite l'SDK Firebase Admin, potresti dover configurare le credenziali di amministratore.

  • I trigger Cloud Firestore e Realtime Database dispongono già di credenziali sufficienti e non richiedono una configurazione aggiuntiva.
  • Tutte le altre API, incluse le API di Firebase come Authentication e FCM o le API di Google come Cloud Translation o Cloud Speech, richiedono i passaggi di configurazione descritti in questa sezione. Questo vale sia che tu stia utilizzando la shell Cloud Functions sia firebase emulators:start.

Per configurare le credenziali di amministratore per le funzioni emulate:

  1. Apri il riquadro Account di servizio della Google Cloud console.
  2. Assicurati che sia selezionato App Engine account di servizio predefinito e utilizza il menu opzioni a destra per selezionare Crea chiave.
  3. Quando ti viene richiesto, seleziona JSON per il tipo di chiave e fai clic su Crea.
  4. Imposta le credenziali predefinite di Google in modo che puntino alla chiave scaricata:

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

Dopo aver completato questi passaggi, i test delle funzioni possono accedere alle API di Firebase e Google utilizzando l'SDK Admin. Ad esempio, quando si testa un trigger Authentication, la funzione emulata potrebbe chiamare admin.auth().getUserByEmail(email).

Configura le funzioni (facoltativo)

Se utilizzi variabili di configurazione delle funzioni personalizzate, esegui prima il comando per ottenere la configurazione personalizzata (esegui questo comando nella directory functions) nel tuo ambiente locale:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

Esegui Emulator Suite

Per eseguire l'emulatore Cloud Functions, utilizza il comando emulators:start:

firebase emulators:start

Il comando emulators:start avvierà gli emulatori per Cloud Functions, Cloud Firestore, Realtime Database e Firebase Hosting in base ai prodotti che hai inizializzato nel tuo progetto locale utilizzando firebase init. Se vuoi avviare un emulatore specifico, utilizza il flag --only:

firebase emulators:start --only functions

Se vuoi eseguire una suite di test o uno script di test dopo l'avvio degli emulatori, utilizza il comando emulators:exec:

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

Strumenta l'app per comunicare con gli emulatori

Per strumentare l'app in modo che interagisca con gli emulatori, potresti dover eseguire una configurazione aggiuntiva.

Strumenta l'app per le funzioni richiamabili

Se le attività di prototipazione e test coinvolgono funzioni di backend richiamabili, configura l'interazione con l'Cloud Functions for Firebase emulatore nel seguente modo:

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().useEmulator(withHost: "localhost", port: 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);

Strumenta l'app per l'emulazione delle funzioni HTTPS

Ogni funzione HTTPS nel codice verrà pubblicata dall'emulatore locale utilizzando il seguente formato URL:

http://$HOST:$PORT/$PROJECT/$REGION/$NAME

Ad esempio, una semplice funzione helloWorld con la porta e la regione host predefinite verrà pubblicata all'indirizzo:

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

Strumenta l'app per l'emulazione delle funzioni della coda di attività

L'emulatore configura automaticamente le code di attività emulate in base alle definizioni dei trigger e l'SDK Admin reindirizza le richieste inserite in coda all'emulatore se rileva che è in esecuzione tramite la variabile di ambiente CLOUD_TASKS_EMULATOR_HOST.

Tieni presente che il sistema di invio utilizzato in produzione è più complesso di quello implementato nell'emulatore, quindi non devi aspettarti che il comportamento emulato rifletta con precisione gli ambienti di produzione. I parametri all'interno dell'emulatore forniscono limiti superiori alla frequenza con cui le attività vengono inviate e ritentate.

Strumenta l'app per l'emulazione delle funzioni attivate in background

L'emulatore Cloud Functions supporta le funzioni attivate in background dalle seguenti origini:

  • Emulatore Realtime Database
  • Emulatore Cloud Firestore
  • Authentication emulatore
  • Pub/Sub emulatore
  • Emulatore di avvisi Firebase

Per attivare gli eventi in background, modifica le risorse di backend utilizzando l' Emulator Suite UI, o collegando l'app o il codice di test agli emulatori utilizzando l'SDK per la tua piattaforma.

Testa i gestori per gli eventi personalizzati emessi dalle estensioni

Per le funzioni che implementi per gestire gli eventi personalizzati Firebase Extensions con Cloud Functions v2, l'emulatore Cloud Functions si accoppia con l' emulatore di Eventarc per supportare i trigger di Eventarc.

Per testare i gestori di eventi personalizzati per le estensioni che emettono eventi, devi installare gli emulatori Cloud Functions ed Eventarc.

Il runtime Cloud Functions imposta la variabile di ambiente EVENTARC_EMULATOR su localhost:9299 nel processo corrente se l'emulatore di Eventarc è in esecuzione. Gli Firebase Admin SDK si connettono automaticamente all'emulatore di Eventarc quando è impostata la variabile di ambiente EVENTARC_EMULATOR. Puoi modificare la porta predefinita come descritto in Configurare Local Emulator Suite.

Quando le variabili di ambiente sono configurate correttamente, il Firebase Admin SDK invia automaticamente gli eventi all'emulatore di Eventarc. A sua volta, l'emulatore di Eventarc effettua una richiamata all'emulatore Cloud Functions per attivare tutti i gestori registrati.

Puoi controllare i log di Functions nel Emulator Suite UI per i dettagli sull' esecuzione del gestore.

Interazioni con altri servizi

Emulator Suite include più emulatori, che consentono di testare le interazioni tra i prodotti.

Cloud Firestore

Se hai funzioni che utilizzano l'SDK Firebase Admin per scrivere in Cloud Firestore, queste scritture verranno inviate all'Cloud Firestore emulator se è in esecuzione. Se altre funzioni vengono attivate da queste scritture, verranno eseguite nell'emulatore Cloud Functions.

Cloud Storage

Se hai funzioni che utilizzano l'SDK Firebase Admin (versione 9.7.0 o successive) per scrivere in Cloud Storage, queste scritture verranno inviate all'emulatore Cloud Storage se è in esecuzione. Se altre funzioni vengono attivate da queste scritture, verranno eseguite nell'emulatore Cloud Functions.

Firebase Authentication

Se hai funzioni che utilizzano l'SDK Firebase Admin (versione 9.3.0 o successive) per scrivere in Firebase Authentication, queste scritture verranno inviate all'emulatore di Authentication se è in esecuzione. Se altre funzioni vengono attivate da queste scritture, verranno eseguite nell'emulatore Cloud Functions.

Firebase Hosting

Se utilizzi Cloud Functions per generare contenuti dinamici per Firebase Hosting, firebase emulators:start utilizza le funzioni HTTP locali come proxy per l'hosting.

Avvisi Firebase

In qualsiasi progetto che includa almeno un trigger di avviso Firebase supportato, l'interfaccia utente dell'emulatore include una scheda FireAlerts. Per emulare un trigger di avviso:

  1. Apri la scheda FireAlerts. Questa scheda mostra un menu a discesa compilato con i tipi di avviso a cui sono associati i trigger (ad esempio, se hai un trigger onNewFatalIssuePublished, viene visualizzato crashlytics.newFatalIssue).
  2. Seleziona un tipo di avviso. Il modulo viene compilato automaticamente con i valori predefiniti, che possono essere modificati. Puoi modificare i campi dell'evento (altre informazioni dell'evento di avviso vengono dedotte, sono valori fittizi o vengono generate in modo casuale).
  3. Seleziona Invia avviso per inviare un avviso sintetico all'emulatore di Functions, con la registrazione disponibile in Avvisi nella console Firebase (oltre che nei log).

Logging

L'emulatore trasmette i log delle funzioni alla finestra del terminale in cui vengono eseguite. Visualizza tutti gli output delle istruzioni console.log(), console.info(), console.error() e console.warn() all'interno delle funzioni.

Passaggi successivi

Per un esempio completo di utilizzo di Firebase Emulator Suite, consulta l' esempio di avvio rapido dei test.