Ejecutar funciones localmente

Firebase CLI incluye un emulador de Cloud Functions que puede emular los siguientes tipos de funciones:

  • Funciones HTTPS
  • Funciones invocables
  • Funciones en segundo plano activadas desde Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage y Cloud Pub/Sub.

Puede ejecutar funciones localmente para probarlas antes de implementarlas en producción.

Instale la CLI de Firebase

Para usar el emulador de Cloud Functions, primero instale Firebase CLI:

npm install -g firebase-tools

Para poder utilizar el emulador local, tus Cloud Functions deben depender de:

  • firebase-admin versión 8.0.0 o superior.
  • firebase-functions versión 3.0.0 o superior.

Configurar credenciales de administrador (opcional)

Si desea que sus pruebas de funciones interactúen con las API de Google u otras API de Firebase a través del SDK de administrador de Firebase , es posible que deba configurar credenciales de administrador.

  • Los activadores de Cloud Firestore y Realtime Database ya tienen credenciales suficientes y no requieren configuración adicional.
  • Todas las demás API, incluidas las API de Firebase, como Authentication y FCM, o las API de Google, como Cloud Translation o Cloud Speech, requieren los pasos de configuración que se describen en esta sección. Esto se aplica ya sea que estés usando el shell de Cloud Functions o firebase emulators:start .

Para configurar credenciales de administrador para funciones emuladas:

  1. Abra el panel Cuentas de servicio de la consola de Google Cloud.
  2. Asegúrese de que la cuenta de servicio predeterminada de App Engine esté seleccionada y use el menú de opciones a la derecha para seleccionar Crear clave .
  3. Cuando se le solicite, seleccione JSON para el tipo de clave y haga clic en Crear .
  4. Configure sus credenciales predeterminadas de Google para que apunten a la clave descargada:

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    ventanas

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

Después de completar estos pasos, sus pruebas de funciones pueden acceder a las API de Firebase y Google mediante el SDK de administrador . Por ejemplo, al probar un activador de autenticación, la función emulada podría llamar admin.auth().getUserByEmail(email) .

Configuración de funciones (opcional)

Si está utilizando variables de configuración de funciones personalizadas, primero ejecute el comando para obtener su configuración personalizada (ejecútela dentro del directorio functions ) en su entorno local:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

Ejecute el conjunto de emuladores

Para ejecutar el emulador de Cloud Functions, utilice el comando emulators:start :

firebase emulators:start

El comando emulators:start iniciará emuladores para Cloud Functions, Cloud Firestore, Realtime Database y Firebase Hosting según los productos que haya inicializado en su proyecto local usando firebase init . Si desea iniciar un emulador en particular, use la opción --only :

firebase emulators:start --only functions

Si desea ejecutar un conjunto de pruebas o un script de prueba después de que se hayan iniciado los emuladores, utilice el comando emulators:exec :

firebase emulators:exec "./my-test.sh"

Instrumenta tu aplicación para hablar con los emuladores

Para instrumentar su aplicación para que interactúe con los emuladores, es posible que deba realizar alguna configuración adicional.

Instrumente su aplicación para funciones invocables

Si sus actividades de prototipo y prueba involucran funciones de backend invocables , configure la interacción con el emulador de Cloud Functions para Firebase de esta 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);
Rápido
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web modular API

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Web namespaced API

firebase.functions().useEmulator("127.0.0.1", 5001);

Instrumente su aplicación para la emulación de funciones HTTPS

Cada función HTTPS en su código se entregará desde el emulador local utilizando el siguiente formato de URL:

http:// $HOST : $PORT / $PROJECT / $REGION / $NAME

Por ejemplo, una función helloWorld simple con el puerto de host y la región predeterminados se serviría en:

https://localhost:5001/ $PROJECT /us-central1/helloWorld

Instrumente su aplicación para la emulación de funciones activadas en segundo plano

El emulador de Cloud Functions admite funciones activadas en segundo plano desde las siguientes fuentes:

  • Emulador de base de datos en tiempo real
  • Emulador de Cloud Firestore
  • Emulador de autenticación
  • Emulador de pub/sub

Para activar eventos en segundo plano, modifique los recursos de back-end mediante la interfaz de usuario de Emulator Suite o conectando su aplicación o código de prueba a los emuladores mediante el SDK de su plataforma.

Controladores de prueba para eventos personalizados emitidos por Extensiones

Para las funciones que implementas para manejar eventos personalizados de Firebase Extensions con Cloud Functions v2, el emulador de Cloud Functions se empareja con el emulador de Eventarc para admitir activadores de Eventarc .

Para probar controladores de eventos personalizados para extensiones que emiten eventos, debe instalar los emuladores Cloud Functions y Eventarc.

El tiempo de ejecución de Cloud Functions establece la variable de entorno EVENTARC_EMULATOR en localhost:9299 en el proceso actual si el emulador Eventarc se está ejecutando. Los SDK de Firebase Admin se conectan automáticamente al emulador de Eventarc cuando se configura la variable de entorno EVENTARC_EMULATOR . Puede modificar el puerto predeterminado como se explica en Configurar Local Emulator Suite .

Cuando las variables de entorno están configuradas correctamente, el SDK de Firebase Admin envía automáticamente eventos al emulador Eventarc. A su vez, el emulador Eventarc vuelve a llamar al emulador de Cloud Functions para activar los controladores registrados.

Puede consultar los registros de funciones en la interfaz de usuario de Emulator Suite para obtener detalles sobre la ejecución del controlador.

Interacciones con otros servicios

El conjunto de emuladores incluye varios emuladores que permiten probar interacciones entre productos.

Tienda de fuego en la nube

Si tiene funciones que utilizan el SDK de administración de Firebase para escribir en Cloud Firestore, estas escrituras se enviarán al emulador de Cloud Firestore si se está ejecutando. Si esas escrituras activan más funciones, se ejecutarán en el emulador de Cloud Functions.

Almacenamiento en la nube

Si tiene funciones que utilizan el SDK de administración de Firebase (versión 9.7.0 o superior) para escribir en Cloud Storage, estas escrituras se enviarán al emulador de Cloud Storage si se está ejecutando. Si esas escrituras activan más funciones, se ejecutarán en el emulador de Cloud Functions.

Autenticación de base de fuego

Si tiene funciones que utilizan el SDK de Firebase Admin (versión 9.3.0 o superior) para escribir en Firebase Authentication, estas escrituras se enviarán al emulador de Auth si se está ejecutando. Si esas escrituras activan más funciones, se ejecutarán en el emulador de Cloud Functions.

Alojamiento base de fuego

Si usas Cloud Functions para generar contenido dinámico para Firebase Hosting , firebase emulators:start usa tus funciones HTTP locales como servidores proxy para el hosting.

Inicio sesión

El emulador transmite registros desde sus funciones a la ventana de terminal donde se ejecutan. Muestra todos los resultados de las declaraciones console.log() , console.info() , console.error() y console.warn() dentro de sus funciones.

Próximos pasos

Para ver un ejemplo completo del uso del conjunto de emuladores Firebase, consulta el ejemplo de inicio rápido de pruebas .