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 superior.firebase-functions
versión3.0.0
o superior.
Configura las credenciales de administrador (opcional)
Si deseas que tus pruebas de funciones interactúen con las API de Google o con otras API 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 API, 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 Google Cloud Console.
- 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 API 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:
Android
// 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://localhost:5001")
Web versión 9
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "localhost", 5001);
Web versión 8
firebase.functions().useEmulator("localhost", 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, conecta la app o el código de prueba a los emuladores con el SDK de tu plataforma.
Interacciones con otros servicios
El paquete de emuladores 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 a fin de 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 el paquete de emuladores de Firebase, consulta la muestra de inicio rápido para pruebas.