Ejecuta funciones de manera local

Puedes ejecutar funciones de manera local para probarlas antes de implementarlas en producción. Para ejecutar funciones de manera local, usa una de las siguientes opciones:

  • El shell de Cloud Functions. Esta herramienta emula todos los tipos de activadores de funciones y proporciona un shell interactivo para invocar las funciones con datos de prueba.
  • El comando firebase serve de Firebase CLI. Esta herramienta emula las funciones HTTPS y proporciona una URL para activar la función local.

Para ambas herramientas, el emulador carga automáticamente los cambios que realizas en el código durante una sesión activa. Si necesitas transpilar tu código (TypeScript, React), asegúrate de hacerlo antes de ejecutar el emulador.

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. Nota:

  • 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, como las de Authentication y FCM, o las de Google, como las de Cloud Translation o Cloud Speech. Esto aplica si usas el shell de Functions o firebase serve.

A fin de configurar las credenciales de administrador para las funciones emuladas (diferentes de Cloud Firestore y Realtime Database), sigue estos pasos:

  1. Abre el panel de Cuentas de servicio de Google Cloud Console.
  2. Asegúrate de seleccionar la cuenta de servicio predeterminada de App Engine. En las opciones de menú 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 tus credenciales predeterminadas de Google para apuntar a la clave descargada:

    Unix

    $ export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    
    $ firebase functions:shell
    
    OR
    
    $ firebase serve --only functions
    

    Windows

    $ set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    
    $ firebase functions:shell
    
    OR
    
    $ firebase serve --only functions
    

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

Usa Firebase serve para funciones HTTPS

Para usar esta función, firebase-tools debe tener, como mínimo, la versión 3.8.0, y el SDK de firebase-functions debe tener, como mínimo, la versión 0.5.7. Para actualizar ambos, ejecuta los siguientes comandos en el directorio functions/ de tu proyecto:

npm install --save firebase-functions@latest firebase-admin
npm install -g firebase-tools

Para ejecutar funciones localmente, usa firebase serve:

firebase serve --only functions # to only emulate HTTP functions
firebase serve # to emulate both HTTP functions and hosting

Este comando genera una URL para tu contenido de Firebase Hosting y una URL para cada función HTTPS. Si usas funciones a fin de generar contenido de forma dinámica para Firebase Hosting, se utilizan tus funciones locales como proxies en el hosting.

Usa el shell de Cloud Functions

El shell de Cloud Functions emula todo tipo de activadores de funciones con un shell interactivo para invocar las funciones con datos de prueba. Las opciones varían según el tipo de función, pero el formato de uso básico es el siguiente:

myFunctionName(data, options)

El parámetro data es necesario para los activadores de Realtime Database y PubSub y es opcional para todos los otros tipos de funciones. Además, el parámetro opcional options es válido solo para las funciones de Realtime Database.

De manera opcional, si deseas cargar datos de prueba de un archivo local, puedes guardar el archivo como una variable y, luego, invocar una función con él:

var data = require('./path/to/testData.json');
myFunction(data);

Instala y configura el shell de Cloud Functions

Para usar esta función, firebase-tools debe tener, como mínimo, la versión 3.11.0 y el SDK de firebase-functions debe tener, como mínimo, la versión 0.6.2. Para actualizar ambos, ejecuta los siguientes comandos en el directorio functions/ de tu proyecto:

npm install --save firebase-functions@latest
npm install -g firebase-tools

Si no usas variables de configuración de funciones personalizadas, ejecuta el shell con el siguiente comando:

firebase functions:shell

Si usas variables de configuración de funciones personalizadas, primero ejecuta el comando para obtener tu configuración personalizada (ejecuta esto dentro del directorio functions) y, a continuación, ejecuta el shell:

firebase functions:config:get > .runtimeconfig.json
firebase functions:shell

Invoca funciones HTTPS

La invocación de funciones HTTPS en el shell funciona de la misma manera que el módulo NPM de request. Simplemente reemplaza request por el nombre de la función que deseas emular. Por ejemplo:

# invoke
myHttpsFunction()
myHttpsFunction.get()
myHttpsFunction.post()

# invoke at sub-path
myHttpsFunction('/path')
myHttpsFunction.get('/path')
myHttpsFunction.post('/path')

# send POST request with form data
myHttpsFunction.post('/path').form( {foo: 'bar' })

Invoca funciones de Realtime Database

Cuando ejecutes funciones de Realtime Database de manera local, deberás proporcionar los datos de prueba adecuados. Por lo general, esto significa que debes proporcionar datos de prueba nuevos para las operaciones onCreate, datos antiguos o eliminados para las operaciones onDelete y ambos para las funciones onUpdate u onWrite:

# invoke onCreate function
myDatabaseFunction('new_data')

# invoke onDelete function
myDatabaseFunction('old_data')

# invoke onUpdate or onWrite function
myDatabaseFunction({before: 'old_data', after: 'new_data' })

Además de las opciones before/after, el shell proporciona la opción params para usarla en simulaciones de comodines en una ruta de acceso:

# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})

De forma predeterminada, el shell ejecuta funciones de Realtime Database con privilegios administrativos. Usa la opción auth para ejecutar funciones como un usuario final en particular o como un usuario no autenticado:

# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})

Invoca funciones de Firestore

Cuando ejecutes funciones de Firestore de manera local, deberás proporcionar los datos de prueba adecuados. Por lo general, esto significa que debes proporcionar datos de prueba nuevos para las operaciones onCreate, datos antiguos o eliminados para las operaciones onDelete y ambos para las funciones onUpdate y onWrite. Ten en cuenta que los datos de Firestore deben ser pares clave-valor; consulta Tipos de datos admitidos.

# invoke onCreate function
myFirestoreFunction({foo: ‘new’})

# invoke onDelete function
myFirestoreFunction({foo: ‘old’})

# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })

Además de las opciones before/after, el shell proporciona la opción params para usarla en simulaciones de comodines en un nombre de documento:

# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})

El shell siempre ejecuta funciones de Firestore con privilegios administrativos, lo que significa que simula un evento create/update/delete como si lo realizara un usuario administrativo.

Invoca funciones de PubSub

En el caso de las funciones de PubSub, inserta tu carga útil de mensaje en una instancia de Buffer y, de forma opcional, puedes agregar atributos de datos como se muestra a continuación:

// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})

Invoca funciones de Analytics

Para invocar una función de Analytics sin datos, ejecuta myAnalyticsFunction() en el shell. Para ejecutar la función con datos de prueba, se recomienda definir una variable para los campos de datos de eventos específicos que necesita tu función:

var data = {
  eventDim: [{
    // populates event.data.params
    params:{foo:'bar'},
    // populates event.data.name
    name: 'event_name',
    // populates event.data.logTime, specify in microseconds
    timestampMicros: Date.now() * 1000,
    // populates event.data.previousLogTime, specify in microseconds
    previousTimestampMicros: Date.now() * 1000,
    // populates event.data.reportingDate, specify in 'YYYYMMDD' format
    date: '20170930',
    // populates event.data.valueInUSD
    valueInUsd: 230
  }],
  userDim: userDim
};

myAnalyticsFunction(data);

Invoca funciones de Storage, Auth y Crashlytics

Para las funciones de Storage, Auth y Crashlytics, invoca la función local con los datos de prueba que deseas ver dentro de la función. Los datos de la prueba deben seguir los formatos de datos correspondientes:

Especifica solo los campos de los que depende tu código o no especifiques campos si solo deseas ejecutar la función.

Registros

Ambas herramientas, firebase serve y el shell de Cloud Functions, transmiten registros de tus funciones a la ventana de terminal donde se ejecutan. Muestran todos los resultados de las declaraciones de console.log(), console.info(), console.error() y console.warn() dentro de tus funciones.

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.