Funktionen interaktiv testen

Die Cloud Functions-Shell bietet eine interaktive Shell zum Aufrufen von Funktionen mit Testdaten. Die Shell unterstützt alle Triggertypen.

Administratoranmeldeinformationen einrichten (optional)

Wenn Sie möchten, dass Ihre Funktionstests über das Firebase Admin SDK mit Google APIs oder anderen Firebase APIs interagieren, müssen Sie möglicherweise Administratoranmeldeinformationen einrichten.

  • Cloud Firestore- und Realtime Database-Trigger verfügen bereits über ausreichende Anmeldeinformationen und erfordern keine zusätzliche Einrichtung.
  • Alle anderen APIs, einschließlich Firebase-APIs wie Authentifizierung und FCM oder Google-APIs wie Cloud Translation oder Cloud Speech, erfordern die in diesem Abschnitt beschriebenen Einrichtungsschritte. Dies gilt unabhängig davon, ob Sie die Cloud Functions-Shell oder firebase emulators:start verwenden.

So richten Sie Administratoranmeldeinformationen für emulierte Funktionen ein:

  1. Öffnen Sie den Bereich „Dienstkonten“ der Google Cloud Console.
  2. Stellen Sie sicher, dass das App Engine-Standarddienstkonto ausgewählt ist, und wählen Sie im Optionsmenü rechts die Option Schlüssel erstellen aus.
  3. Wenn Sie dazu aufgefordert werden, wählen Sie JSON als Schlüsseltyp aus und klicken Sie auf Erstellen .
  4. Legen Sie Ihre Google-Standardanmeldeinformationen so fest, dass sie auf den heruntergeladenen Schlüssel verweisen:

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase functions:shell
    

    Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase functions:shell
    

Nach Abschluss dieser Schritte können Ihre Funktionstests mithilfe des Admin SDK auf Firebase- und Google-APIs zugreifen. Beim Testen eines Authentifizierungstriggers könnte die emulierte Funktion beispielsweise admin.auth().getUserByEmail(email) aufrufen.

Stellen Sie Funktionen mithilfe einer Cloud Functions-Shell bereit

Die Cloud Functions-Shell emuliert alle Arten von Funktionsauslösern mit einer interaktiven Shell zum Aufrufen der Funktionen mit Testdaten. Die Optionen variieren je nach Funktionstyp, das grundlegende Verwendungsformat ist jedoch:

myFunctionName(data, options)

Der data ist für Realtime Database-, Cloud Firestore- und PubSub-Trigger erforderlich und für alle anderen Funktionstypen optional. Außerdem ist der optionale options nur für Echtzeitdatenbank- und Cloud Firestore-Funktionen gültig.

Optional können Sie Testdaten aus einer lokalen Datei laden, indem Sie die Datei als Variable speichern und damit eine Funktion aufrufen:

var data = require('./path/to/testData.json');
myFunction(data);

Installieren und konfigurieren Sie die Cloud Functions-Shell

Um diese Funktion nutzen zu können, müssen firebase-tools mindestens Version 3.11.0 und firebase-functions SDK mindestens Version 0.6.2 haben. Um beide zu aktualisieren, führen Sie die folgenden Befehle im Verzeichnis functions/ für Ihr Projekt aus:

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

Wenn Sie Konfigurationsvariablen für benutzerdefinierte Funktionen verwenden, führen Sie zunächst den Befehl aus, um Ihre benutzerdefinierte Konfiguration (führen Sie diese im functions aus) in Ihrer lokalen Umgebung abzurufen:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

Führen Sie abschließend die Shell mit dem folgenden Befehl aus:

firebase functions:shell

Rufen Sie HTTPS-Funktionen auf

Für den Aufruf von HTTPS-Funktionen in der Shell ist die Verwendung dieselbe wie beim request -NPM-Modul, aber ersetzen Sie request durch den Namen der Funktion, die Sie emulieren möchten. Zum Beispiel:

# 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' })

Rufen Sie aufrufbare HTTPS-Funktionen auf

Wenn Sie aufrufbare HTTPS-Funktionen lokal aufrufen, müssen Sie entsprechende Testdaten bereitstellen.

# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})

Optional können Sie als zweiten Parameter ein Firebase-Instance-ID-token übergeben. Dies muss eine Zeichenfolge sein.

# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})

Die Emulation von context.auth ist derzeit nicht verfügbar.

Rufen Sie Echtzeitdatenbankfunktionen auf

Wenn Sie Echtzeitdatenbankfunktionen lokal ausführen, müssen Sie entsprechende Testdaten bereitstellen. Dies bedeutet im Allgemeinen die Bereitstellung neuer Testdaten für onCreate Vorgänge, alter/entfernter Daten für onDelete Vorgänge und beides für onUpdate oder onWrite Funktionen:

# invoke onCreate function
myDatabaseFunction('new_data')

# invoke onDelete function
myDatabaseFunction('old_data')

# invoke onUpdate or onWrite function
myDatabaseFunction({before: 'old_data', after: 'new_data' })

Zusätzlich zu den before/after Optionen stellt die Shell die Option params zur Verfügung, die zum Verspotten von Platzhaltern in einem Pfad verwendet werden kann:

# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})

Standardmäßig führt die Shell Echtzeitdatenbankfunktionen mit Administratorrechten (Dienstkonto) aus. Verwenden Sie stattdessen die auth , um Funktionen als bestimmter Endbenutzer oder als nicht authentifizierter Benutzer auszuführen:

# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})

Rufen Sie Firestore-Funktionen auf

Wenn Sie Firestore-Funktionen lokal ausführen, müssen Sie entsprechende Testdaten bereitstellen. Dies bedeutet im Allgemeinen die Bereitstellung neuer Testdaten für onCreate Vorgänge, alter/entfernter Daten für onDelete Vorgänge und beides für onUpdate oder onWrite Funktionen. Beachten Sie, dass Firestore-Daten Schlüssel-Wert-Paare sein müssen. siehe Unterstützte Datentypen .

# invoke onCreate function
myFirestoreFunction({foo: ‘new’})

# invoke onDelete function
myFirestoreFunction({foo: ‘old’})

# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })

Zusätzlich zu den before/after Feldern des data können Sie die params des options verwenden, um Platzhalter in einem Dokumentnamen zu simulieren:

# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})

Die Shell führt Firestore-Funktionen immer mit Administratorrechten aus, was bedeutet, dass sie ein Erstellungs-/Aktualisierungs-/Löschereignis vortäuscht, als ob es von einem Administrator ausgeführt würde.

Rufen Sie PubSub-Funktionen auf

Fügen Sie für PubSub-Funktionen Ihre Nachrichtennutzlast in eine Buffer Instanz ein und fügen Sie optional Datenattribute hinzu, wie gezeigt:

// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})

Rufen Sie Analytics-Funktionen auf

Sie können eine Analytics-Funktion ohne Daten aufrufen, indem Sie myAnalyticsFunction() in der Shell ausführen. Um die Funktion mit Testdaten auszuführen, wird empfohlen, eine Variable für die spezifischen Ereignisdatenfelder zu definieren, die Ihre Funktion benötigt:

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

Rufen Sie Speicher- und Authentifizierungsfunktionen auf

Rufen Sie für Speicher- und Authentifizierungsfunktionen die lokale Funktion mit den Testdaten auf, die Sie innerhalb der Funktion sehen möchten. Ihre Testdaten müssen den entsprechenden Datenformaten entsprechen:

Geben Sie nur die Felder an, von denen Ihr Code abhängt, oder gar keine, wenn Sie die Funktion nur ausführen möchten.