Testuj funkcje interaktywnie

Powłoka Cloud Functions zapewnia interaktywną powłokę do wywoływania funkcji z danymi testowymi. Powłoka obsługuje wszystkie typy wyzwalaczy.

Skonfiguruj poświadczenia administratora (opcjonalnie)

Jeśli chcesz, aby testy funkcji wchodziły w interakcje z interfejsami API Google lub innymi interfejsami API Firebase za pośrednictwem pakietu Firebase Admin SDK , może być konieczne skonfigurowanie danych logowania administratora.

  • Wyzwalacze Cloud Firestore i Realtime Database mają już wystarczające dane uwierzytelniające i nie wymagają dodatkowej konfiguracji.
  • Wszystkie inne interfejsy API, w tym interfejsy API Firebase, takie jak Uwierzytelnianie i FCM, lub Google API, takie jak Cloud Translation lub Cloud Speech, wymagają 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ć poświadczenia administratora dla emulowanych funkcji:

  1. Otwórz panel Konta usług w Google Cloud Console.
  2. Upewnij się, że wybrane jest domyślne konto usługi App Engine , i użyj menu opcji po prawej stronie, aby wybrać opcję Utwórz klucz .
  3. Po wyświetleniu monitu wybierz JSON jako typ klucza i kliknij Utwórz .
  4. Ustaw domyślne dane logowania Google tak, aby wskazywały pobrany klucz:

    Uniks

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

    Okna

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

Po wykonaniu tych czynności testy funkcji mogą uzyskiwać dostęp do interfejsów Firebase i Google API za pomocą pakietu Admin SDK . Na przykład podczas testowania wyzwalacza uwierzytelniania emulowana funkcja może wywołać admin.auth().getUserByEmail(email) .

Obsługuj funkcje przy użyciu powłoki Cloud Functions

Powłoka Cloud Functions emuluje wszystkie typy wyzwalaczy funkcji za pomocą interaktywnej powłoki do wywoływania funkcji z danymi testowymi. Opcje różnią się w zależności od typu funkcji, ale podstawowy format użycia to:

myFunctionName(data, options)

Parametr data jest wymagany w przypadku wyzwalaczy Baza danych czasu rzeczywistego, Cloud Firestore i PubSub oraz opcjonalny w przypadku wszystkich innych typów funkcji. Ponadto opcjonalny parametr options jest ważny tylko dla funkcji Realtime Database i Cloud Firestore.

Opcjonalnie możesz załadować dane testowe z pliku lokalnego, zapisując plik jako zmienną i wywołując z nim funkcję:

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

Zainstaluj i skonfiguruj powłokę Cloud Functions

Aby korzystać z tej funkcji, firebase-tools musi mieć wersję co najmniej 3.11.0, a firebase-functions SDK musi mieć wersję co najmniej 0.6.2. Aby zaktualizować oba, uruchom następujące polecenia w katalogu functions/ swojego projektu:

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

Jeśli używasz niestandardowych zmiennych konfiguracyjnych funkcji, najpierw uruchom polecenie, aby uzyskać niestandardową konfigurację (uruchom to w katalogu functions ) w środowisku lokalnym:

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ę za pomocą następującego polecenia:

firebase functions:shell

Wywołaj funkcje HTTPS

W przypadku wywoływania funkcji HTTPS w powłoce użycie jest takie samo, jak w przypadku modułu request NPM, ale zastąp request nazwą funkcji, którą chcesz emulować. Na 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łaj funkcje wywoływalne HTTPS

Podczas lokalnego wywoływania funkcji HTTPS, które można wywoływać, musisz podać odpowiednie dane testowe.

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

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

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

Emulacja context.auth jest obecnie niedostępna.

Wywołaj funkcje bazy danych czasu rzeczywistego

Podczas lokalnego uruchamiania funkcji bazy danych czasu rzeczywistego konieczne będzie podanie odpowiednich danych testowych. Ogólnie oznacza to dostarczenie nowych danych testowych dla operacji onCreate , starych/usuniętych danych dla operacji onDelete oraz obu funkcji onUpdate lub 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 udostępnia opcję params , której można użyć do naśladowania 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 (konta usługi). Użyj opcji auth , aby zamiast tego uruchamiać funkcje jako określony użytkownik końcowy lub jako użytkownik nieuwierzytelniony:

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

Wywołaj funkcje Firestore

Podczas lokalnego uruchamiania funkcji Firestore musisz podać odpowiednie dane testowe. Ogólnie oznacza to dostarczanie nowych danych testowych dla operacji onCreate , starych/usuniętych danych dla operacji onDelete oraz obu dla funkcji onUpdate lub onWrite . Pamiętaj, że dane Firestore muszą być parami 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 możesz użyć pól params w obiekcie options , aby udawać 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, co oznacza, że ​​symuluje zdarzenie tworzenia/aktualizacji/usuwania, tak jakby zostało wykonane przez użytkownika administracyjnego.

Wywołaj funkcje PubSub

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

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

Wywołaj funkcje Analytics

Możesz wywołać funkcję Analytics bez żadnych danych, uruchamiając myAnalyticsFunction() w powłoce. Aby uruchomić funkcję z danymi testowymi, zaleca się zdefiniowanie zmiennej dla określonych pól danych zdarzeń, których potrzebuje funkcja:

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łaj funkcje Storage i Auth

W przypadku funkcji Storage i Auth wywołaj funkcję lokalną z danymi testowymi, które chcesz zobaczyć w funkcji. Twoje dane testowe muszą być zgodne z odpowiednimi formatami danych:

Określ tylko pola, od których zależy twój kod, lub wcale, jeśli chcesz tylko uruchomić funkcję.