Interaktywne testowanie funkcji

Powłoka Cloud Functions udostępnia interaktywną powłokę do wywoływania z danymi testowymi. Powłoka obsługuje wszystkie typy aktywatorów.

Skonfiguruj dane logowania administratora (opcjonalnie)

Jeśli chcesz, aby testy funkcji działały z interfejsami API Google lub innymi Firebase interfejsów API poprzez pakiet SDK Firebase Admin. dane logowania administratora.

  • Aktywatory Cloud Firestore i Realtime Database mają już odpowiednie dane logowania i nie wymagają dodatkowej konfiguracji.
  • Wszystkie inne interfejsy API, w tym interfejsy Firebase API, np. Authentication i FCM oraz interfejsy API Google, takie jak Cloud Translation czy Cloud Speech, wymagają wykonania czynności konfiguracyjnych opisanych w tej sekcji. Ma to zastosowanie niezależnie od tego, czy używasz powłoki Cloud Functions, czy firebase emulators:start.

Aby skonfigurować dane logowania administratora na potrzeby emulowanych funkcji:

  1. Otwórz aplikację Panel Konta usługi konsoli Google Cloud.
  2. Wybierz App Engine domyślne konto usługi i użyj otwórz menu opcji po prawej stronie i wybierz Utwórz klucz.
  3. Gdy pojawi się prośba, wybierz typ klucza JSON i kliknij Utwórz.
  4. Ustaw swoje domyślne dane logowania Google, by wskazywały pobrany klucz:

    Unix

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

    Windows

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

Gdy wykonasz te czynności, testy funkcjonalne będą miały dostęp do Firebase, interfejsów API Google przy użyciu pakietu Admin SDK, Na przykład podczas testowania aktywatora Authentication, emulowana funkcja może wywołać funkcję admin.auth().getUserByEmail(email)

Obsługa funkcji z użyciem powłoki Cloud Functions

Powłoka Cloud Functions emuluje wszystkie typy aktywatorów funkcji za pomocą tagu interaktywna powłoka do wywoływania funkcji z danymi testowymi. Dostępne opcje według typu funkcji, ale podstawowy format użycia to:

myFunctionName(data, options)

Parametr data jest wymagany w przypadku Bazy danych czasu rzeczywistego, Cloud Firestore, i aktywatorów PubSub oraz opcjonalne w przypadku wszystkich innych typów funkcji. Poza tym opcjonalny parametr options ma zastosowanie tylko w przypadku Bazy danych czasu rzeczywistego. i Cloud Firestore.

Opcjonalnie dane testowe można wczytać z przez zapisanie pliku jako zmiennej i wywołanie z nim funkcji:

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

Instalowanie i konfigurowanie powłoki Cloud Functions

Aby można było korzystać z tej funkcji, firebase-tools musi mieć wersję 3.11.0 lub większą, Pakiet SDK firebase-functions musi mieć wersję 0.6.2 lub większą. Aby to zrobić, uruchom w projekcie te polecenia w katalogu functions/:

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

Jeśli używasz zmiennych konfiguracji funkcji niestandardowych, najpierw uruchom polecenie pobrania konfiguracji niestandardowej (uruchom je w katalogu functions) w Twoim lokalnym środowisku:

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

Na koniec uruchom powłokę tym poleceniem:

firebase functions:shell

Wywoływanie funkcji HTTPS

Jeśli chcesz wywoływać funkcje HTTPS w powłoce, użycie jest takie samo jak request Moduł NPM, który został zastąpiony request nazwą funkcji, którą chcesz emulować. Przykład:

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

Wywoływanie funkcji HTTPS wywoływanych przez HTTPS

Podczas lokalnego wywoływania funkcji wywoływanych przez HTTPS musisz podać odpowiednie dane testowe.

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

Opcjonalnie jako drugi parametr możesz przekazać Firebase-Instance-ID-token. Musi to być ciąg znaków.

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

Emulacja funkcji context.auth jest obecnie niedostępna.

Wywoływanie funkcji bazy danych czasu rzeczywistego

Gdy uruchamiasz funkcje Bazy danych czasu rzeczywistego lokalnie, musisz podać odpowiednich danych testowych. Zwykle oznacza to zazwyczaj przesyłanie nowych danych testowych Operacje onCreate, stare/usunięte dane operacji onDelete oraz zarówno te dotyczące Funkcje onUpdate i 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' })

Oprócz opcji before/after powłoka zawiera interfejs params opcja używana do imitowania symboli wieloznacznych w ścieżce:

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

Domyślnie powłoka uruchamia funkcje Bazy danych czasu rzeczywistego z uprawnieniami administratora (konto usługi) uprawnień. Aby zamiast tego uruchamiać funkcje jako określone, użyj opcji auth lub nieuwierzytelniony użytkownik:

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

Wywoływanie funkcji Firestore

Podczas lokalnego uruchamiania funkcji Firestore musisz podać odpowiednich danych testowych. Zwykle oznacza to zazwyczaj przesyłanie nowych danych testowych Operacje onCreate, stare/usunięte dane operacji onDelete oraz zarówno te dotyczące funkcji onUpdate i onWrite. Pamiętaj, że dane Firestore muszą być pary klucz-wartość; zobacz Obsługiwane typy danych.

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

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

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

Oprócz pól before/after obiektu data funkcja możesz użyć pól params w obiekcie options do imitacji symbole wieloznaczne w nazwie dokumentu:

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

Powłoka zawsze uruchamia funkcje Firestore z uprawnieniami administratora, które imituje zdarzenie tworzenia/aktualizacji/usuwania, tak jakby zostało ono wykonane przez użytkownika z dostępem administracyjnym.

Wywołaj funkcje PubSub

W przypadku funkcji PubSub wstaw ładunek wiadomości do instancji Buffer i dodaj opcjonalne atrybuty danych, jak pokazano poniżej:

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

Wywoływanie funkcji Analytics

Funkcję Analytics można wywołać bez żadnych danych przez: uruchamianie w powłoce programu myAnalyticsFunction(). Aby uruchomić funkcję z danymi testowymi, zalecamy zdefiniowanie zmiennej dla konkretne pola danych zdarzenia, których Twoja funkcja potrzebuje:

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

Wywoływanie funkcji pamięci i uwierzytelniania

W przypadku funkcji przechowywania i uwierzytelniania wywołaj funkcję lokalną za pomocą i testowanie danych, które chcesz zobaczyć wewnątrz funkcji. Dane testowe muszą muszą mieć odpowiednie formaty danych:

Określ tylko pola, od których zależy kod, lub nie podawaj żadnych, jeśli gdy użytkownik chce uruchomić funkcję.