Firebase CLI incluye un emulador de Cloud Functions que puede emular los siguientes tipos de funciones:
- Funciones HTTPS
- Funciones que admiten llamadas
- Funciones en segundo plano que se activan desde Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage 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
Con el fin de usar el emulador local, Cloud Functions debe contar con 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 de 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
.
Para 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 las opciones de menú 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 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 realización de pruebas involucran funciones de backend que admiten llamadas, configura la interacción con el emulador de Cloud Functions para 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")
API modular web
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
API con espacio de nombres 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 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
Para activar eventos en segundo plano, modifica los recursos del backend con la IU de Emulator Suite 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
En las funciones que implementas para controlar eventos personalizados de Extensiones de Firebase con Cloud Functions v2, el emulador de Cloud Functions se sincroniza 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 Cloud Functions y Eventarc.
El entorno de ejecución de Cloud Functions establece la variable
de entorno EVENTARC_EMULATOR
en localhost:9299
en el proceso actual si se está ejecutando el emulador de
Eventarc. Los SDK de Firebase Admin se conectan automáticamente al emulador de Eventarc cuando
se establece 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 SDK de Firebase Admin envía eventos automáticamente al emulador de Eventarc. A su vez, el emulador de Eventarc hace una llamada al emulador de Cloud Functions para activar cualquier controlador registrado.
Puedes verificar los registros de Functions en la IU de Emulator Suite para obtener detalles sobre la ejecución del controlador.
Interacciones con otros servicios
Emulator Suite incluye varios emuladores, lo que permite probar las interacciones entre los productos.
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.
Registros
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.