Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Testare le funzioni in modo interattivo

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

La shell di Cloud Functions fornisce una shell interattiva per richiamare funzioni con dati di test. La shell supporta tutti i tipi di trigger.

Configurare le credenziali di amministratore (facoltativo)

Se desideri che i test delle funzioni interagiscano con le API di Google o altre API di Firebase tramite Firebase Admin SDK , potrebbe essere necessario configurare le credenziali di amministratore.

  • I trigger di Cloud Firestore e Realtime Database dispongono già di credenziali sufficienti e non richiedono un'ulteriore configurazione.
  • Tutte le altre API, comprese le API di 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 se utilizzi la shell di Cloud Functions o firebase emulators:start .

Per configurare le credenziali di amministratore per le funzioni emulate:

  1. Apri il riquadro Account di servizio di Google Cloud Console.
  2. Assicurati che l' account di servizio predefinito di App Engine sia selezionato e utilizza il menu delle opzioni a destra per selezionare Crea chiave .
  3. Quando richiesto, seleziona JSON come tipo di chiave e fai clic su Crea .
  4. 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' Admin SDK . Ad esempio, durante il test di un trigger di autenticazione, la funzione emulata potrebbe chiamare admin.auth().getUserByEmail(email) .

Offri funzioni utilizzando una shell 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 opzionale options è valido solo per le funzioni Realtime Database e Cloud Firestore.

Facoltativamente, puoi caricare i dati del test da un file locale salvando il file come variabile e richiamando 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/ per il tuo progetto:

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

Se stai utilizzando le variabili di configurazione delle funzioni personalizzate, esegui prima il comando per ottenere la tua configurazione personalizzata (eseguila all'interno della 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 funzioni HTTPS

Per richiamare le funzioni HTTPS nella shell, l'utilizzo è lo stesso del modulo request NPM, ma sostituisci request con il nome della funzione che vuoi 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 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 è al momento disponibile.

Richiama le funzioni del database in tempo reale

Quando si eseguono funzioni di Realtime Database in locale, sarà 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 ed entrambi per le 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 l'opzione params da usare per deridere i 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 privilegi di amministratore (account di servizio). Utilizzare l'opzione auth per eseguire invece le funzioni come utente finale specifico 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 di Firestore in locale, dovrai fornire i dati di test appropriati. Questo in genere significa fornire nuovi dati di test per le operazioni onCreate , dati vecchi/rimossi per le operazioni onDelete ed entrambi per le funzioni onUpdate o 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 sull'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 amministrativi, il che significa che prende in giro un evento di creazione/aggiornamento/cancellazione come se fosse fatto da un utente amministratore.

Richiama le funzioni PubSub

Per le funzioni PubSub, inserisci il payload del tuo messaggio in un'istanza Buffer e aggiungi facoltativamente attributi di dati come mostrato:

// 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 alcun dato eseguendo myAnalyticsFunction() nella shell. Per eseguire la funzione con i dati di test, si consiglia di definire una variabile per i campi di dati dell'evento specifici necessari alla funzione:

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);

Richiama le funzioni di archiviazione e autenticazione

Per le funzioni Storage e Auth, richiama la funzione locale con i dati di test che desideri visualizzare all'interno della funzione. I dati del test devono seguire i formati di dati corrispondenti:

Specificare solo i campi da cui dipende il codice o nessuno se si desidera solo eseguire la funzione.