El shell de Cloud Functions proporciona un shell interactivo para invocar funciones con datos de prueba. La shell admite todos los tipos de activadores.
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 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 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
.
Para configurar las credenciales de administrador para las funciones emuladas, sigue estos pasos:
- Abre el panel Cuentas de servicio de la consola de Google Cloud.
- 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 functions:shell
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase functions:shell
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)
.
Entrega funciones con una shell de Cloud Functions
La shell de Cloud Functions emula todo tipo de activadores de funciones con una shell interactiva 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 obligatorio para los activadores de Realtime Database, Cloud Firestore 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 y Cloud Firestore.
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 la 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/
del proyecto:
npm install --save firebase-functions@latest
npm install -g firebase-tools
Si usas variables de configuración de funciones personalizadas, primero ejecuta el comando para obtener la configuración personalizada (ejecútalo 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
Por último, ejecuta la shell con el siguiente comando:
firebase functions:shell
Invoca funciones HTTPS
Si quieres invocar funciones HTTPS en el shell, el uso es el mismo que para el módulo request
de NPM, pero debes reemplazar request
por el nombre de la función que quieres 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 HTTPS que admiten llamadas
Cuando ejecutes funciones HTTPS que admiten llamadas de manera local, deberás proporcionar datos de prueba adecuados.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
De manera opcional, puedes pasar un Firebase-Instance-ID-token
como el segundo parámetro. Este parámetro debe ser una string.
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
La emulación de context.auth
no está disponible por el momento.
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 quitados para las operaciones onDelete
y ambos para las funciones onUpdate
o 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
, la shell proporciona la opción params
para usarla en simulaciones de comodines en una ruta de acceso, como en este ejemplo:
# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})
Según la configuración predeterminada, la shell ejecuta funciones de Realtime Database con privilegios de administrador (cuenta de servicio). Usa la opción auth
para ejecutar funciones como un usuario final en particular o como un usuario no autenticado. Por ejemplo:
# 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 quitados para las operaciones onDelete
y ambos para las funciones onUpdate
o 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 los campos before/after
del objeto data
, puedes usar los campos params
del objeto options
para simular comodines en un nombre de un documento. Por ejemplo:
# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})
La shell siempre ejecuta funciones de Firestore con privilegios de administrador, lo que significa que simula un evento create/update/delete como si lo realizara un usuario administrador.
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, agrega 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 la 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: {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);
Invoca funciones de Storage y Auth
Para las funciones de Storage y Auth, invoca la función local con los datos de prueba que quieres ver dentro de la función. Los datos de la prueba deben seguir los formatos de datos correspondientes:
- Para Cloud Storage:
ObjectMetadata
- Para Authentication:
UserRecord
Especifica solo los campos de los que depende tu código o no especifiques campos si solo deseas ejecutar la función.