Firebase CLI incluye un emulador de Cloud Functions que puede emular los siguientes tipos de funciones:
- Funciones HTTPS
- Funciones que admiten llamadas
- Funciones de lista de tareas en cola
- Funciones en segundo plano que se activan desde Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, alertas de Firebase compatibles y Cloud Pub/Sub
Puedes ejecutar funciones de manera local para probarlas antes de implementarlas en producción.
Instala Firebase CLI
Para usar el emulador de Cloud Functions, primero instala Firebase CLI:
npm install -g firebase-tools
Para usar el emulador local, tu Cloud Functions debe depender de lo siguiente:
firebase-admin
versión8.0.0
o superiorfirebase-functions
versión3.0.0
o superior
Configura las credenciales de administrador (opcional)
Si quieres que tus pruebas de funciones interactúen con las APIs de Google o con otras APIs de Firebase mediante el SDK de Firebase Admin, es posible que debas configurar las credenciales de administrador.
- Los activadores Cloud Firestore y Realtime Database ya tienen las credenciales necesarias y no requieren una configuración adicional.
- Se deben seguir los pasos de configuración descritos en esta sección para todas las otras APIs, incluidas las de Firebase, p. ej.: Authentication y FCM, o las de Google, como Cloud Translation o Cloud Speech. Esto se aplica si usas la shell de Cloud Functions o
firebase emulators:start
.
A fin de configurar las credenciales de administrador para las funciones emuladas, sigue estos pasos:
- Abre el panel Cuentas de servicio de la consola de Google Cloud.
- Asegúrate de seleccionar la cuenta de servicio predeterminada de App Engine. En el menú de opciones del lado derecho, elige Crear clave.
- Cuando se te solicite, selecciona JSON para el tipo de clave y haz clic en Crear.
Configura las credenciales predeterminadas de Google para apuntar a la clave descargada:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase emulators:start
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase emulators:start
Después de completar estos pasos, tus pruebas de funciones pueden acceder a las APIs de Google y
Firebase a través del SDK de Admin. Por ejemplo, cuando pruebes un activador de Authentication, la función emulada podría llamar a admin.auth().getUserByEmail(email)
.
Establece la configuración de funciones (opcional)
Si usas variables de configuración de funciones personalizadas, primero ejecuta el comando para obtener la configuración personalizada (ejecuta esto dentro del directorio functions
) en tu entorno local:
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
Ejecuta el conjunto de herramientas del emulador
Para ejecutar el emulador de Cloud Functions, usa el comando emulators:start
:
firebase emulators:start
El comando emulators:start
iniciará los emuladores para Cloud Functions,
Cloud Firestore, Realtime Database y Firebase Hosting en función de los productos
que inicializaste en tu proyecto local con firebase
init
. Si quieres
iniciar un emulador específico, usa la marca --only
:
firebase emulators:start --only functions
Si quieres ejecutar una paquete de prueba o una secuencia de comandos de prueba después de que se inicien los emuladores, usa el comando emulators:exec
:
firebase emulators:exec "./my-test.sh"
Instrumenta la app para que se comunique con los emuladores
Si quieres instrumentar tu app para que interactúe con los emuladores, es posible que debas realizar pasos de configuración adicionales.
Instrumenta la app para funciones que admiten llamadas
Si tus actividades de prototipado y de realización de pruebas involucran funciones de backend que admiten llamadas, configura la interacción con el emulador de Cloud Functions for Firebase de la siguiente manera:
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);
Instrumenta la app para emular funciones HTTPS
Se entregará cada función HTTPS de tu código desde el emulador local con el siguiente formato de URL:
http://$HOST:$PORT/$PROJECT/$REGION/$NAME
Por ejemplo, una función helloWorld
simple con el puerto y la región de host predeterminados se entregarían en la siguiente ubicación:
https://localhost:5001/$PROJECT/us-central1/helloWorld
Instrumenta la app para emular las funciones de la lista de tareas en cola
El emulador configura automáticamente listas de tareas en cola emuladas en función del las definiciones de activador, y el SDK de Admin redirige las solicitudes en cola al emulador si
detecta que se está ejecutando a través de la variable de entorno CLOUD_TASKS_EMULATOR_HOST
.
Ten en cuenta que el sistema de despacho usado en producción es más complejo que el implementado en el emulador, por lo que no deberías esperar que el comportamiento emulado replique con precisión los entornos de producción. Los parámetros dentro del emulador proporcionan límites superiores a la velocidad a la que se despachan y reintentan las tareas.
Instrumenta la app para emular funciones activadas en segundo plano
El emulador de Cloud Functions admite funciones activadas en segundo plano de las siguientes fuentes:
- Emulador de Realtime Database
- Emulador de Cloud Firestore
- Emulador de Authentication
- Emulador de Pub/Sub
- Emulador de alertas de Firebase
Para activar eventos en segundo plano, modifica los recursos del backend con la Emulator Suite UI o conecta tu app o código de prueba a los emuladores con el SDK de tu plataforma.
Prueba controladores para eventos personalizados emitidos por Extensiones
Para las funciones que implementes para controlar eventos personalizados de Firebase Extensions con Cloud Functions v2, el emulador de Cloud Functions se vincula con el emulador de Eventarc para admitir activadores de Eventarc.
Si quieres probar los controladores de eventos personalizados para las extensiones que emiten eventos, debes instalar los emuladores de Eventarc y Cloud Functions.
El entorno de ejecución de Cloud Functions configura la variable de entorno de EVENTARC_EMULATOR
como localhost:9299
en el proceso actual si el emulador de Eventarc
se esté ejecutando. Los Firebase Admin SDK se conectan automáticamente al emulador de Eventarc
cuando se configura la variable de entorno EVENTARC_EMULATOR
. Puedes
modificar el puerto predeterminado como se explica en Configura Local Emulator Suite.
Cuando las variables de entorno se configuran correctamente, el Firebase Admin SDK envía eventos automáticamente al emulador de Eventarc. A su vez, este último hace una llamada al emulador de Cloud Functions para activar cualquier controlador registrado.
Puedes verificar los registros de Functions en la Emulator Suite UI para obtener detalles sobre la ejecución del controlador.
Interacciones con otros servicios
Emulator Suite incluye varios emuladores, lo que permite probar los productos cruzados.
Cloud Firestore
Si tienes funciones que usan el SDK de Firebase Admin para escribir en Cloud Firestore, estas operaciones de escritura se enviarán al emulador de Cloud Firestore si se está ejecutando. Si esas operaciones de escritura activan otras funciones, estas se ejecutarán en el emulador de Cloud Functions.
Cloud Storage
Si tienes funciones que usan el SDK de Firebase Admin (versión 9.7.0 o superior) para escribir en Cloud Storage, estas operaciones de escritura se enviarán al emulador de Cloud Storage si se está ejecutando. Si esas operaciones de escritura activan otras funciones, estas se ejecutarán en el emulador de Cloud Functions.
Firebase Authentication
Si tienes funciones que usan el SDK de Firebase Admin (versión 9.3.0 o superior) para escribir en Firebase Authentication, estas operaciones de escritura se enviarán al emulador de Auth si se está ejecutando. Si esas operaciones de escritura activan otras funciones, estas se ejecutarán en el emulador de Cloud Functions.
Firebase Hosting
Si usas Cloud Functions para generar contenido dinámico para
Firebase Hosting, firebase emulators:start
usa tus funciones de HTTP locales como proxies para hosting.
Alertas de Firebase
En cualquier proyecto que incluya al menos un activador de alertas de Firebase compatible, la IU del emulador incluye una pestaña FireAlerts. Para emular un activador de alertas, sigue estos pasos:
- Abre la pestaña FireAlerts. En esta pestaña, se muestra un menú desplegable propagado con los tipos de alertas que tienen activadores asociados (por ejemplo, si tienes un activador onNewFatalIssuePublished, se mostrará crashlytics.newFatalIssue).
- Selecciona un tipo de alerta. El formulario se propaga automáticamente con valores predeterminados, que se pueden editar. Puedes editar los campos del evento (la otra información del evento de alerta se infiere, se genera de forma aleatoria o se simula).
- Selecciona Enviar alerta para enviar una alerta sintética al emulador de funciones, con el registro disponible en Alertas en Firebase console (así como en los registros).
Logging
El emulador transmite registros de tus funciones a la ventana de la terminal en la que se ejecutan. Muestra toda la información resultante de las declaraciones console.log()
, console.info()
, console.error()
y console.warn()
dentro de tus funciones.
Próximos pasos
Si quieres ver un ejemplo completo de cómo usar Firebase Emulator Suite, consulta la muestra de inicio rápido para pruebas.