El shell de Cloud Functions proporciona un shell interactivo para invocar funciones con datos de prueba. El shell admite todos los tipos de disparadores.
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:
- Abra el panel Cuentas de servicio de la consola de Google Cloud.
- 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 .
- Cuando se le solicite, seleccione JSON para el tipo de clave y haga clic en Crear .
Configure sus credenciales predeterminadas de Google para que apunten a la clave descargada:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase functions:shell
ventanas
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase functions:shell
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)
.
Servir funciones usando un shell de Cloud Functions
El shell de Cloud Functions emula todos los tipos 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:
myFunctionName(data, options)
El parámetro data
es obligatorio para los activadores de Realtime Database, Cloud Firestore y PubSub, y es opcional para todos los demás tipos de funciones. Además, el parámetro options
opcional es válido solo para las funciones Realtime Database y Cloud Firestore.
Opcionalmente, puede cargar datos de prueba desde un archivo local guardando el archivo como una variable e invocando una función con él:
var data = require('./path/to/testData.json');
myFunction(data);
Instalar y configurar el shell de Cloud Functions
Para utilizar esta función, firebase-tools
debe tener la versión mínima 3.11.0 y el SDK firebase-functions
debe tener la versión mínima 0.6.2. Para actualizar ambos, ejecute los siguientes comandos en el directorio functions/
de su proyecto:
npm install --save firebase-functions@latest
npm install -g firebase-tools
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
Finalmente, ejecute el shell con el siguiente comando:
firebase functions:shell
Invocar funciones HTTPS
Para invocar funciones HTTPS en el shell, el uso es el mismo que el del módulo request
NPM, pero reemplace request
con el nombre de la función que desea 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' })
Invocar funciones invocables HTTPS
Al invocar funciones HTTPS invocables localmente, deberá proporcionar los datos de prueba adecuados.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
Opcionalmente, puedes pasar un Firebase-Instance-ID-token
como segundo parámetro. Esto debe ser una cuerda.
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
La emulación de context.auth
no está disponible actualmente.
Invocar funciones de base de datos en tiempo real
Al ejecutar las funciones de Realtime Database localmente, deberá proporcionar los datos de prueba adecuados. Esto generalmente significa proporcionar nuevos datos de prueba para las operaciones onCreate
, datos antiguos/eliminados para las operaciones onDelete
y tanto para las funciones onUpdate
como 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 usar como comodines simulados en una ruta:
# 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 base de datos en tiempo real con privilegios de administrador (cuenta de servicio). Utilice la opción auth
para ejecutar funciones como un usuario final particular o como un usuario no autenticado:
# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})
Invocar funciones de Firestore
Cuando ejecute las funciones de Firestore localmente, deberá proporcionar los datos de prueba adecuados. Esto generalmente significa proporcionar nuevos datos de prueba para las operaciones onCreate
, datos antiguos/eliminados para las operaciones onDelete
y tanto para las funciones onUpdate
como onWrite
. Tenga en cuenta que los datos de Firestore deben ser pares clave-valor; consulte 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 los campos before/after
del objeto data
, puede usar los campos params
en el objeto de options
para simular comodines en el nombre de un 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 se burla de un evento de creación/actualización/eliminación como si lo hiciera un usuario administrativo.
Invocar funciones de PubSub
Para las funciones de PubSub, inserte la carga útil de su mensaje en una instancia Buffer
y agregue opcionalmente atributos de datos como se muestra:
// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})
Invocar funciones de Analytics
Puede invocar una función de Analytics sin ningún dato ejecutando 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 su función necesita:
var data = {
eventDim: [{
// populates event.data.params
params: {foo: {stringValue: 'bar'} },
// Also valid:
// {intValue: '10'}, {floatValue: '1.0'}, {doubleValue: '1.0'}
// 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);
Invocar funciones de almacenamiento y autenticación
Para las funciones de almacenamiento y autenticación, invoque la función local con los datos de prueba que le gustaría ver dentro de la función. Los datos de su prueba deben seguir los formatos de datos correspondientes:
- Para almacenamiento en la nube:
ObjectMetadata
- Para autenticación:
UserRecord
Especifique solo los campos de los que depende su código, o ninguno si solo desea ejecutar la función.