La shell di Cloud Functions fornisce una shell interattiva per richiamare con i dati di test. La shell supporta tutti i tipi di trigger.
(Facoltativo) Configura le credenziali di amministratore
Se vuoi che i test delle funzioni interagiscano con le API di Google o altri servizi Firebase API mediante l'SDK Admin Firebase, potresti dover configurare e le credenziali di amministratore.
- Cloud Firestore e Realtime Database trigger hanno già 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 la procedura di configurazione descritta in questa sezione. Questo vale sia se utilizzi il shell Cloud Functions sia
firebase emulators:start
.
Per configurare le credenziali amministrative per le funzioni emulate:
- Apri l'app Riquadro Account di servizio della console Google Cloud.
- Assicurati che sia selezionato App Engine account di servizio predefinito e utilizza dal menu opzioni a destra per selezionare Crea chiave.
- Quando richiesto, seleziona JSON come tipo di chiave e fai clic su Crea.
Imposta le credenziali predefinite di Google in modo che puntino alla chiave scaricata:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase functions:shell
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase functions:shell
Dopo aver completato questi passaggi, i test delle funzioni possono accedere a Firebase e
le API di Google utilizzando l'SDK Admin. Ad esempio, durante il test
un trigger Authentication, la funzione emulata potrebbe chiamare
admin.auth().getUserByEmail(email)
.
Gestisci le funzioni utilizzando una shell di Cloud Functions
La shell di Cloud Functions emula tutti i tipi di trigger di funzione con un una shell interattiva per richiamare le funzioni con i dati di test. Le opzioni variano per tipo di funzione, ma il formato di utilizzo di base è:
myFunctionName(data, options)
Il parametro data
è obbligatorio per Realtime Database, Cloud Firestore,
e Pub/Sub e facoltativa per tutti gli altri tipi di funzioni.
Inoltre, il parametro facoltativo options
è valido solo per Realtime Database
e le funzioni di Cloud Firestore.
Facoltativamente, puoi caricare i dati di test da un salvandolo come variabile e richiamando una funzione:
var data = require('./path/to/testData.json');
myFunction(data);
Installa e configura la shell di Cloud Functions
Per utilizzare questa funzionalità, firebase-tools
deve avere la versione minima 3.11.0 e
l'SDK firebase-functions
deve avere la versione minima 0.6.2. Per aggiornarli entrambi,
esegui i seguenti comandi nella directory functions/
del tuo progetto:
npm install --save firebase-functions@latest
npm install -g firebase-tools
Se utilizzi le variabili di configurazione delle funzioni personalizzate, esegui prima
comando per ottenere la configurazione personalizzata (eseguilo nella directory 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
Richiamare funzioni HTTPS
Per richiamare le funzioni HTTPS nella shell, l'utilizzo è lo stesso
request
Modulo Gestione dei partner di rete, ma sostituisci
request
con il nome della funzione che vuoi emulare. Ad 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 funzioni richiamabili HTTPS
Quando richiami localmente le funzioni richiamabili HTTPS, devi fornire i dati di test appropriati.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
Se vuoi, puoi passare un Firebase-Instance-ID-token
come secondo parametro. Deve essere una stringa.
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
L'emulazione di context.auth
non è al momento disponibile.
Richiamare funzioni di Realtime Database
Quando esegui le funzioni di Realtime Database localmente, devi fornire
di test appropriati. In genere, ciò significa fornire nuovi dati di test
onCreate
operazioni, dati vecchi/rimossi per onDelete
operazioni ed entrambi per
Funzioni 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' })
Oltre alle opzioni before/after
, la shell fornisce i params
da utilizzare nella simulazione di 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 di Realtime Database con amministratore (account di servizio)
privilegiati. Utilizza l'opzione auth
per eseguire le funzioni come un determinato 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 funzioni Firestore
Quando esegui le funzioni Firestore in locale, dovrai fornire
di test appropriati. In genere, ciò significa fornire nuovi dati di test
onCreate
operazioni, dati vecchi/rimossi per onDelete
operazioni ed entrambi per
onUpdate
o onWrite
. Tieni presente che i dati Firestore devono essere
coppie chiave-valore; consulta la sezione 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
,
puoi utilizzare i campi params
dell'oggetto options
per simulare
i caratteri jolly in un nome di 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 amministrativi, simula un evento di creazione/aggiornamento/eliminazione come se fosse stato eseguito da un un utente con accesso amministrativo.
Richiamare funzioni Pub/Sub
Per le funzioni PubSub, inserisci il payload del messaggio in un'istanza Buffer
e
aggiungi attributi dei dati facoltativi, come mostrato di seguito:
// 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 Analytics
Puoi richiamare una funzione di Analytics senza dati tramite:
che esegue myAnalyticsFunction()
nella shell.
Per eseguire la funzione con dati di test, è consigliabile definire una variabile per
I campi specifici dei dati sugli eventi necessari alla tua funzione:
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);
Richiamare le funzioni di archiviazione e autenticazione
Per le funzioni Storage e Auth, richiama la funzione locale con il metodo di testare i dati che vorresti vedere all'interno della funzione. I dati del test devono seguiranno i formati dei dati corrispondenti:
- Per Cloud Storage:
ObjectMetadata
- Per Authentication:
UserRecord
Specifica solo i campi da cui dipende il codice oppure nessuno se utilizzi solo vuoi eseguire la funzione.