La shell di Cloud Functions fornisce una shell interattiva per richiamare funzioni con dati di test. La shell supporta tutti i tipi di trigger.
Configura le credenziali di amministratore (facoltativo)
Se desideri che i tuoi test delle funzioni interagiscano con le API di Google o altre API Firebase tramite Firebase Admin SDK , potresti dover configurare le credenziali di amministratore.
- I trigger di Cloud Firestore e Realtime Database dispongono già di credenziali sufficienti e non richiedono una configurazione aggiuntiva.
- Tutte le altre API, comprese le API Firebase come Authentication e FCM o le API di Google come Cloud Translation o Cloud Speech, richiedono i passaggi di configurazione descritti in questa sezione. Questo vale sia che tu stia utilizzando la shell di Cloud Functions o
firebase emulators:start
.
Per configurare le credenziali di amministratore per le funzioni emulate:
- Apri il riquadro Account di servizio di Google Cloud Console.
- Assicurati che l' account di servizio predefinito di App Engine sia selezionato e utilizza il menu delle opzioni a destra per selezionare Crea chiave .
- Quando richiesto, seleziona JSON per il tipo di chiave e fai clic su Crea .
Imposta le tue credenziali predefinite di Google in modo che puntino alla chiave scaricata:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase functions:shell
finestre
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase functions:shell
Dopo aver completato questi passaggi, i tuoi test delle funzioni possono accedere alle API di Firebase e Google utilizzando l' SDK di amministrazione . Ad esempio, durante il test di un trigger di autenticazione, la funzione emulata potrebbe chiamare admin.auth().getUserByEmail(email)
.
Servire le funzioni utilizzando una shell di Cloud Functions
La shell di Cloud Functions emula tutti i tipi di trigger di funzione con una shell interattiva per richiamare le funzioni con i dati di test. Le opzioni variano in base al tipo di funzione, ma il formato di utilizzo di base è:
myFunctionName(data, options)
Il parametro data
è obbligatorio per i trigger Realtime Database, Cloud Firestore e PubSub e facoltativo per tutti gli altri tipi di funzione. Inoltre, il parametro delle options
facoltative è valido solo per le funzioni Realtime Database e Cloud Firestore.
Facoltativamente, puoi caricare i dati di prova da un file locale salvando il file come variabile e invocando una funzione con esso:
var data = require('./path/to/testData.json');
myFunction(data);
Installa e configura la shell di Cloud Functions
Per utilizzare questa funzione, firebase-tools
deve avere la versione minima 3.11.0 e l'SDK firebase-functions
deve avere la versione minima 0.6.2. Per aggiornare entrambi, esegui i seguenti comandi nella directory functions/
del tuo progetto:
npm install --save firebase-functions@latest
npm install -g firebase-tools
Se stai utilizzando variabili di configurazione delle funzioni personalizzate, esegui prima il comando per ottenere la tua configurazione personalizzata (eseguila nella directory delle functions
) nel tuo ambiente locale:
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
Infine, esegui la shell con il seguente comando:
firebase functions:shell
Richiama le funzioni HTTPS
Per richiamare le funzioni HTTPS nella shell, l'utilizzo è lo stesso del modulo NPM di request
, ma sostituisci request
con il nome della funzione che desideri emulare. Per esempio:
# 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' })
Richiama le funzioni richiamabili HTTPS
Quando si richiamano le funzioni HTTPS Callable in locale, è necessario fornire dati di test appropriati.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
Facoltativamente, puoi passare un Firebase-Instance-ID-token
come secondo parametro. Questa deve essere una stringa.
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
L'emulazione di context.auth
non è attualmente disponibile.
Richiama le funzioni del database in tempo reale
Quando si eseguono localmente le funzioni del database in tempo reale, è necessario fornire dati di test appropriati. Questo in genere significa fornire nuovi dati di test per le operazioni onCreate
, dati vecchi/rimossi per le operazioni onDelete
e sia per le funzioni onUpdate
che 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' })
Oltre alle opzioni before/after
, la shell fornisce l'opzione params
da utilizzare per simulare caratteri jolly in un percorso:
# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})
Per impostazione predefinita, la shell esegue le funzioni del database in tempo reale con privilegi di amministratore (account di servizio). Utilizzare l'opzione di auth
per eseguire invece funzioni come un particolare utente finale o come utente non autenticato:
# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})
Richiama le funzioni Firestore
Quando si eseguono le funzioni Firestore in locale, è necessario fornire dati di test appropriati. Questo generalmente significa fornire nuovi dati di test per le operazioni onCreate
, dati vecchi/rimossi per le operazioni onDelete
e sia per le funzioni onUpdate
che onWrite
. Tieni presente che i dati di Firestore devono essere coppie chiave-valore; vedere Tipi di dati supportati .
# invoke onCreate function
myFirestoreFunction({foo: ‘new’})
# invoke onDelete function
myFirestoreFunction({foo: ‘old’})
# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })
Oltre ai campi before/after
dell'oggetto data
, è possibile utilizzare i campi params
dell'oggetto options
per simulare i caratteri jolly nel nome di un documento:
# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})
La shell esegue sempre le funzioni Firestore con privilegi di amministratore, il che significa che simula un evento di creazione/aggiornamento/eliminazione come se fosse stato eseguito da un utente amministrativo.
Richiama le funzioni PubSub
Per le funzioni PubSub, inserire il payload messaggio in un Buffer
istanza e aggiungere eventualmente attributi dei dati come indicato:
// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})
Richiama le funzioni di analisi
È possibile richiamare una funzione Analytics senza dati eseguendo myAnalyticsFunction()
nel guscio. Per eseguire la funzione con i dati di test, si consiglia di definire una variabile per i campi di dati evento specifico che le vostre esigenze di funzionalità:
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);
funzioni invoke stoccaggio e Auth
Per le funzioni di archiviazione e Auth, richiamare la funzione locale con i dati di test che si desidera vedere all'interno della funzione. I suoi dati di prova deve seguire i corrispondenti formati di dati:
- Per Cloud Storage:
ObjectMetadata
- Per l'autenticazione:
UserRecord
Specificare solo i campi che il codice dipende, o del tutto assenti se desideri solo per eseguire la funzione.