Esegui le funzioni in locale

La CLI Firebase include un emulatore Cloud Functions che può emulare i seguenti tipi di funzioni:

  • Funzioni HTTPS
  • Funzioni richiamabili
  • Funzioni in background attivate da Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage e Cloud Pub/Sub.

È possibile eseguire funzioni localmente per testarle prima della distribuzione in produzione.

Installa la CLI di Firebase

Per utilizzare l'emulatore Cloud Functions, installa prima la CLI Firebase:

npm install -g firebase-tools

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

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

Configura le credenziali di amministratore (facoltativo)

Se desideri che i test delle funzioni interagiscano con le API di Google o altre API Firebase tramite Firebase Admin SDK , potrebbe essere necessario impostare le credenziali di amministratore.

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

Per impostare le credenziali di amministratore per le funzioni emulate:

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

    Unix

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

    finestre

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

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

Imposta la configurazione delle funzioni (opzionale)

Se utilizzi variabili di configurazione delle funzioni personalizzate, esegui prima il comando per ottenere la configurazione personalizzata (eseguila 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 la suite dell'emulatore

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 particolare emulatore, usa il flag --only :

firebase emulators:start --only functions

Se desideri 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"

Strumenti la tua app per comunicare con gli emulatori

Per far sì che la tua app interagisca con gli emulatori, potrebbe essere necessario eseguire alcune configurazioni aggiuntive.

Dota la tua app di funzioni richiamabili

Se il tuo prototipo e le tue attività di test coinvolgono funzioni backend richiamabili , configura l'interazione con l'emulatore Cloud Functions for Firebase in questo modo:

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

Web namespaced API

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

Strumenta la tua app per l'emulazione delle funzioni HTTPS

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

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

Ad esempio, una semplice funzione helloWorld con la porta host e la regione predefinite verrebbe servita in:

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

Gestisci la tua app per l'emulazione di funzioni attivate in background

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

  • Emulatore di database in tempo reale
  • Emulatore Cloud Firestore
  • Emulatore di autenticazione
  • Emulatore Pub/Sub

Per attivare eventi in background, modifica le risorse back-end utilizzando l'interfaccia utente di Emulator Suite oppure collegando la tua app o testando il codice agli emulatori utilizzando l'SDK per la tua piattaforma.

Testare i gestori degli eventi personalizzati emessi dalle estensioni

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

Per testare i gestori 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 Eventarc è in esecuzione. Gli SDK di amministrazione di Firebase si connettono automaticamente all'emulatore Eventarc quando è impostata la variabile di ambiente EVENTARC_EMULATOR . È possibile modificare la porta predefinita come discusso in Configura Local Emulator Suite .

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

Puoi controllare i log delle funzioni nell'interfaccia utente di Emulator Suite per i dettagli sull'esecuzione del gestore.

Interazioni con altri servizi

La suite di emulatori include più emulatori che consentono di testare le interazioni tra prodotti.

Cloud Fire Store

Se disponi di funzioni che utilizzano Firebase Admin SDK per scrivere su Cloud Firestore, queste scritture verranno inviate all'emulatore Cloud Firestore se è in esecuzione. Se ulteriori funzioni vengono attivate da tali scritture, verranno eseguite nell'emulatore Cloud Functions.

Archiviazione nel cloud

Se disponi di funzioni che utilizzano Firebase Admin SDK (versione 9.7.0 o successiva) per scrivere su Cloud Storage, queste scritture verranno inviate all'emulatore Cloud Storage se è in esecuzione. Se ulteriori funzioni vengono attivate da tali scritture, verranno eseguite nell'emulatore Cloud Functions.

Autenticazione Firebase

Se disponi di funzioni che utilizzano Firebase Admin SDK (versione 9.3.0 o successiva) per scrivere su Firebase Authentication, queste scritture verranno inviate all'emulatore Auth se è in esecuzione. Se ulteriori funzioni vengono attivate da tali scritture, verranno eseguite nell'emulatore Cloud Functions.

Hosting Firebase

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

Registrazione

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

Prossimi passi

Per un esempio completo di utilizzo della suite di emulazione Firebase, consulta l' esempio di avvio rapido del test .