L'interfaccia a riga di comando di Firebase include un emulatore Cloud Functions che può emulare i seguenti tipi di funzioni:
- Funzioni HTTPS
- Funzioni richiamabili
- Funzioni coda 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 eseguirne il deployment in produzione.
Installa l'interfaccia a riga di comando di Firebase
Per utilizzare l'emulatore Cloud Functions, installa prima l'interfaccia a riga di comando di Firebase:
npm install -g firebase-tools
Per usare l'emulatore locale, il tuo Cloud Functions deve dipendere da:
firebase-admin
versione8.0.0
o successive.firebase-functions
versione3.0.0
o successive.
Configura le credenziali di amministrazione (facoltativo)
Se vuoi che i test delle funzioni interagiscano con le API di Google o altri servizi Firebase API mediante l'SDK Admin Firebase, potresti dover configurare e le credenziali di amministratore.
- Gli attivatori Cloud Firestore e Realtime Database dispongono già di credenziali sufficienti e non richiedono alcuna configurazione aggiuntiva.
- Tutte le altre API, comprese le API Firebase come Authentication e FCM o le API di Google come Cloud Translation o Cloud Speech, richiedono la procedura di configurazione descritta in questa sezione. Questo si applica a prescindere dall'utilizzo della shell Cloud Functions o di
firebase emulators:start
.
Per configurare le credenziali amministrative per le funzioni emulate:
- Apri l'app Riquadro Account di servizio della console Google Cloud.
- Assicurati che sia selezionato l'account di servizio predefinito App Engine 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 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 a Firebase e
le API di Google utilizzando l'SDK Admin. Ad esempio, durante il test di un attivatore Authentication, la funzione emulata potrebbe chiamare admin.auth().getUserByEmail(email)
.
(Facoltativo) Imposta la configurazione delle funzioni
Se utilizzi variabili di configurazione delle funzioni personalizzate, esegui prima il
comando per recuperare la configurazione personalizzata (eseguilo 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 di emulatori
Per eseguire l'emulatore Cloud Functions, usa il comando emulators:start
:
firebase emulators:start
Il comando emulators:start
avvia gli emulatori per Cloud Functions, Cloud Firestore, Realtime Database e Firebase Hosting in base ai prodotti che hai inizializzato nel progetto locale utilizzando firebase
init
. Se vuoi avviare un emulatore specifico, usa 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"
Imposta la tua app per comunicare con gli emulatori
Per eseguire l'instrumentazione dell'app in modo che interagisca con gli emulatori, potresti dover eseguire qualche configurazione aggiuntiva.
Strumenti della tua app per le funzioni richiamabili
Se le attività di test e del prototipo prevedono funzioni di backend richiamabili, configura l'interazione con l'emulatore Cloud Functions for Firebase come segue:
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);
Strumenti della tua app per l'emulazione delle funzioni HTTPS
Ogni funzione HTTPS nel codice viene gestita dall'emulatore locale utilizzando il seguente formato URL:
http://$HOST:$PORT/$PROJECT/$REGION/$NAME
Ad esempio, una funzione helloWorld
semplice con la porta e la regione dell'host predefinite verrebbe gestita all'indirizzo:
https://localhost:5001/$PROJECT/us-central1/helloWorld
Strumenta l'app per l'emulazione delle funzioni di coda di attività
L'emulatore configura automaticamente le code di attività emulate in base alle definizioni degli attivatori e l'Admin SDK reindirizza le richieste 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, pertanto non dovresti aspettarti che il comportamento simulato rispecchi esattamente gli ambienti di produzione. I parametri all'interno dell'emulatore forniscono limiti superiori alla frequenza con cui le attività vengono inviate e riprovate.
Esegui l'instrumentazione dell'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
- Emulatore Authentication
- Emulatore Pub/Sub
- Emulatore di avvisi Firebase
Per attivare gli eventi in background, modifica le risorse di backend utilizzando Emulator Suite UI o collegando l'app o il codice di test agli emulatori utilizzando l'SDK per la tua piattaforma.
Test dei gestori per gli eventi personalizzati emessi dalle estensioni
Per le funzioni implementate per gestire Firebase Extensions eventi personalizzati con Cloud Functions v2, l'emulatore Cloud Functions si accoppia emulatore Eventarc da supportare 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 Cloud Functions imposta la variabile di ambiente EVENTARC_EMULATOR
su localhost:9299
nel processo corrente se l'emulatore Eventarc è in esecuzione. I Firebase Admin SDK si connettono automaticamente all'emulatore Eventarc quando è impostata la variabile di ambiente EVENTARC_EMULATOR
. Puoi
modificare la porta predefinita come descritto 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 richiama l'emulatore Cloud Functions per attivare eventuali gestori registrati.
Puoi controllare i log di Functions nel Emulator Suite UI per maggiori dettagli su dell'esecuzione di un gestore.
Interazioni con altri servizi
La suite di emulatori include più emulatori, che consentono sulle interazioni tra prodotti.
Cloud Firestore
Se disponi di funzioni che utilizzano l'SDK Admin Firebase per scrivere Cloud Firestore, queste scritture verranno inviate all'emulatore Cloud Firestore se è in esecuzione. Se queste scritture attivano altre funzioni, verranno eseguite nell'emulatore Cloud Functions.
Cloud Storage
Se hai funzioni che utilizzano l'SDK Admin Firebase (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 disponi di funzioni che utilizzano l'SDK Admin Firebase (versione 9.3.0 o successive) per scrivere in Firebase Authentication, queste scritture verranno inviate all'emulatore di autenticazione 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 tue funzioni HTTP locali come proxy per l'hosting.
Avvisi Firebase
In qualsiasi progetto che includa almeno un attivatore di avviso Firebase supportato, l'interfaccia utente dell'emulatore include una scheda FireAlerts. Per emulare un trigger di avviso:
- Apri la scheda FireAlerts. Questa scheda mostra un menu a discesa con i campi tipi di avvisi a cui sono associati trigger (ad esempio, se hai un trigger onNewFatalIssuePublished, viene eseguito il comando Crashlytics.newFatalIssue .
- Seleziona un tipo di avviso. Il modulo viene compilato automaticamente con i valori predefiniti, che possono essere modificati. Puoi modificare i campi dell'evento (le altre informazioni dell'evento di avviso sono dedotte, valori simulati o generati in modo casuale).
- Seleziona Invia avviso per inviare un avviso sintetico all'emulatore delle funzioni, con il logging disponibile in Avvisi nella console Firebase (nonché nei log).
Logging
L'emulatore trasmette in streaming i log dalle tue funzioni alla finestra del terminale dove
vengono eseguiti tutti i test delle unità. Visualizza tutti gli output di console.log()
, console.info()
,
Istruzioni console.error()
e console.warn()
all'interno delle tue funzioni.
Passaggi successivi
Per un esempio completo di utilizzo della suite di emulatori Firebase, consulta la esempio della guida rapida per i test.