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 delle code 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 del deployment in produzione.
Installa l'interfaccia a riga di comando di Firebase
Per utilizzare l'emulatore Cloud Functions, installa innanzitutto l'interfaccia a riga di comando di Firebase:
npm install -g firebase-tools
Per utilizzare l'emulatore locale, il tuo Cloud Functions deve dipendere da:
firebase-adminversione8.0.0o successive.firebase-functionsversione3.0.0o successive.
(Facoltativo) Configura le credenziali di amministratore
Se vuoi che i test funzionali 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 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 utilizzi la shell Cloud Functions sia che utilizzi
firebase emulators:start.
Per configurare le credenziali di amministratore per le funzioni emulate:
- Apri il riquadro Service account della console Google Cloud.
- Assicurati che sia selezionato App Engine default service account e utilizza il menu 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 rimandino 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 alle API di Google utilizzando l'SDK Admin. Ad esempio, durante il test di un trigger Authentication, la funzione emulata potrebbe chiamare admin.auth().getUserByEmail(email).
(Facoltativo) Configura le funzioni
Se utilizzi variabili di configurazione delle funzioni personalizzate, esegui prima il comando per ottenere la configurazione personalizzata (eseguilo 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 di emulatori
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"
Dopo l'avvio, l'emulatore trasmette i log dalle funzioni alla finestra del terminale in cui viene eseguito. Visualizza tutto l'output delle istruzioni console.log(), console.info(), console.error() e console.warn() all'interno delle tue funzioni.
Tieni presente che l'output dell'emulatore simula il deployment delle funzioni per impostazione predefinita in una regione specifica (us-central1) che potrebbe non corrispondere alla regione predefinita del deployment di produzione effettivo. Per saperne di più sulle regioni, consulta Località Cloud Functions.
Strumenta la tua app per comunicare con gli emulatori
Per instrumentare l'app in modo che interagisca con gli emulatori, potrebbe essere necessaria una configurazione aggiuntiva.
Strumenta la tua app per le funzioni richiamabili
Se le tue attività di prototipazione e test coinvolgono funzioni di backend richiamabili, configura l'interazione con l'emulatore Cloud Functions for Firebase in questo 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)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance; // Connects to the Functions Emulator running on port 5001 functions.UseFunctionsEmulator("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);
Strumenta la tua app per l'emulazione delle funzioni HTTPS
Ogni funzione HTTPS nel tuo 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 host e la regione predefinite verrebbe pubblicata all'indirizzo:
https://localhost:5001/$PROJECT/us-central1/helloWorld
Strumenta la tua 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 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 rispecchi esattamente gli ambienti di produzione. I parametri all'interno dell'emulatore forniscono i limiti superiori alla frequenza con cui le attività vengono inviate e ritentate.
Strumenta la tua 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.
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 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 Cloud Functions imposta la variabile di ambiente EVENTARC_EMULATOR su localhost:9299 nel processo corrente se l'emulatore Eventarc è in esecuzione. Firebase Admin SDK si connette automaticamente all'emulatore Eventarc quando viene 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 effettua una chiamata all'emulatore Cloud Functions per attivare eventuali gestori registrati.
Puoi controllare i log di Functions in Emulator Suite UI 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 i prodotti.
Cloud Firestore
Se hai funzioni che utilizzano l'SDK Firebase Admin per scrivere su 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 Firebase Admin (versione 9.7.0 o successive) per scrivere su Cloud Storage, queste scritture verranno inviate all'emulatore Cloud Storage se è in esecuzione. Se queste scritture attivano altre funzioni, verranno eseguite nell'emulatore Cloud Functions.
Firebase Authentication
Se hai funzioni che utilizzano l'SDK Firebase Admin (versione 9.3.0 o successiva) per scrivere in Firebase Authentication, queste scritture verranno inviate all'emulatore Auth se è in esecuzione. Se queste scritture attivano altre funzioni, 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 trigger di avviso Firebase supportato, la UI dell'emulatore include una scheda FireAlerts. Per emulare un trigger di avviso:
- Apri la scheda FireAlerts. Questa scheda mostra un menu a discesa contenente i tipi di avvisi con trigger associati (ad esempio, se hai un trigger onNewFatalIssuePublished, viene visualizzato 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 vengono dedotte, sono valori fittizi o vengono generate in modo casuale).
- Seleziona Invia avviso per inviare un avviso sintetico all'emulatore di Functions, con il logging disponibile in Avvisi nella console Firebase (oltre che nei log).
Passaggi successivi
Per un esempio completo di utilizzo della suite di emulatori Firebase, consulta l'esempio di guida rapida ai test.