Ejecuta funciones de manera local

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ón 8.0.0 o superior
  • firebase-functions versión 3.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:

  1. Abre el panel Cuentas de servicio de la consola de Google Cloud.
  2. Asegúrate de seleccionar la cuenta de servicio predeterminada de App Engine. En el menú de opciones del lado derecho, elige Crear clave.
  3. Cuando se te solicite, selecciona JSON para el tipo de clave y haz clic en Crear.
  4. 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
// 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:

  1. 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).
  2. 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).
  3. 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.