L'interfaccia a riga di comando di Firebase include un emulatore di funzioni cloud che può emulare i seguenti tipi di funzione:
- Funzioni HTTPS
- Funzioni richiamabili
- Funzioni in background attivate da Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage e Cloud Pub/Sub.
È possibile eseguire le funzioni in locale per testarle prima della distribuzione in produzione.
Installa l'interfaccia a riga di comando di Firebase
Per utilizzare l'emulatore di Cloud Functions, installa prima l'interfaccia a riga di comando di Firebase:
npm install -g firebase-tools
Per poter utilizzare l'emulatore locale, le tue Funzioni Cloud devono dipendere da:
-
firebase-admin
versione8.0.0
o successiva. -
firebase-functions
versione3.0.0
o successiva.
Configurare le credenziali di amministratore (facoltativo)
Se desideri che i test delle funzioni interagiscano con le API di Google o altre API di Firebase tramite Firebase Admin SDK , potrebbe essere necessario configurare le credenziali di amministratore.
- I trigger di Cloud Firestore e Realtime Database dispongono già di credenziali sufficienti e non richiedono un'ulteriore configurazione.
- Tutte le altre API, comprese 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 se utilizzi la shell di Cloud Functions o
firebase emulators:start
.
Per configurare le credenziali di amministratore per le funzioni emulate:
- Apri il riquadro Account di servizio di Google Cloud Console.
- Assicurati che l'account di servizio predefinito di App Engine sia selezionato e utilizza il menu delle opzioni a destra per selezionare Crea chiave .
- Quando richiesto, seleziona JSON come tipo di chiave e fai clic su Crea .
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 tuoi test delle funzioni possono accedere alle API di Firebase e Google utilizzando l' Admin SDK . Ad esempio, durante il test di un trigger di autenticazione, la funzione emulata potrebbe chiamare admin.auth().getUserByEmail(email)
.
Configurazione delle funzioni di set up (opzionale)
Se stai utilizzando le variabili di configurazione delle funzioni personalizzate, esegui prima il comando per ottenere la tua configurazione personalizzata (eseguila all'interno della 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 di 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 particolare, usa il flag --only
:
firebase emulators:start --only functions
Se si desidera eseguire una suite di test o uno script di test dopo l'avvio degli emulatori, utilizzare il comando emulators:exec
:
firebase emulators:exec "./my-test.sh"
Strumenta la tua app per parlare con gli emulatori
Per strumentare la tua app per interagire con gli emulatori, potrebbe essere necessario eseguire alcune configurazioni aggiuntive.
Strumenta la tua app per le funzioni richiamabili
Se le tue attività di prototipo e test prevedono funzioni di backend richiamabili , configura l'interazione con l'emulatore di Cloud Functions per 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);
Rapido
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
Web modular API
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "localhost", 5001);
Web namespaced API
firebase.functions().useEmulator("localhost", 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 a:
https://localhost:5001/ $PROJECT /us-central1/helloWorld
Strumenta la tua app per l'emulazione di funzioni attivate in background
L'emulatore di Cloud Functions supporta le 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 di back-end utilizzando l'interfaccia utente di Emulator Suite o collegando la tua app o il codice di test agli emulatori utilizzando l'SDK per la tua piattaforma.
Gestori di test per eventi personalizzati emessi dalle estensioni
Per le funzioni che implementi per gestire gli eventi personalizzati di Firebase Extensions con Cloud Functions v2, l'emulatore di Cloud Functions si accoppia con l'emulatore Eventarc per supportare i trigger Eventarc .
Per testare i gestori di eventi personalizzati per le estensioni che emettono eventi, devi installare gli emulatori Cloud Functions ed Eventarc.
Il runtime di Cloud Functions imposta la variabile di ambiente EVENTARC_EMULATOR
su localhost:9299
nel processo corrente se l'emulatore Eventarc è in esecuzione. Gli SDK Firebase Admin si connettono automaticamente all'emulatore Eventarc quando è impostata la variabile di ambiente EVENTARC_EMULATOR
. È possibile modificare la porta predefinita come discusso in Configure 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 richiama l'emulatore Cloud Functions per attivare eventuali gestori registrati.
Puoi controllare i log di 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.
CloudFirestore
Se disponi di funzioni che utilizzano l'SDK Firebase Admin 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 di Cloud Functions.
Archiviazione cloud
Se disponi di funzioni che utilizzano l'SDK Firebase Admin (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 di 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 di Cloud Functions.
Hosting Firebase
Se utilizzi Cloud Functions per generare contenuti dinamici per Firebase Hosting , firebase emulators:start
utilizza le tue funzioni HTTP locali come proxy per l'hosting.
Registrazione
L'emulatore trasmette i log dalle tue funzioni alla finestra del terminale in cui vengono eseguiti. Visualizza tutto l'output delle console.log()
, console.info()
, console.error()
e console.warn()
all'interno delle funzioni.
Prossimi passi
Per un esempio completo dell'utilizzo della suite di emulatori Firebase, consulta l' esempio di avvio rapido per il test .