Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

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 dane logowania administratora (opcjonalnie)

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

  • Wyzwalacze Cloud Firestore i Realtime Database mają już wystarczające dane logowania i nie wymagają dodatkowej konfiguracji.
  • Wszystkie inne interfejsy API, w tym interfejsy Firebase API, takie jak uwierzytelnianie i FCM, lub interfejsy Google, takie jak Cloud Translation lub Cloud Speech, wymagają czynności konfiguracyjnych opisanych w tej sekcji. Dotyczy to zarówno funkcji powłoki, jak i firebase emulators:start .

Aby skonfigurować poświadczenia administratora dla emulowanych funkcji:

  1. Otwórz panel Konta usługi 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ć 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:

    Uniksa

    $ 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 kroków Twoje testy funkcji będą mogły uzyskiwać dostęp do interfejsów API Firebase i Google za pomocą pakietu Admin SDK . Na przykład podczas testowania wyzwalacza uwierzytelniania emulowana funkcja może wywołać admin.auth().getUserByEmail(email) .

Udostępniaj funkcje za pomocą 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 Bazy danych czasu rzeczywistego, Cloud Firestore i PubSub oraz opcjonalny w przypadku wszystkich innych typów funkcji. Ponadto opcjonalny parametr options jest prawidłowy tylko dla funkcji Bazy danych czasu rzeczywistego 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 muszą mieć wersję co najmniej 3.11.0, a pakiet SDK firebase-functions musi mieć wersję co najmniej 0.6.2. Aby zaktualizować oba, uruchom następujące polecenia w katalogu functions/ Twojego 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
firebase functions:shell

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 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ływane HTTPS

Podczas lokalnego wywoływania funkcji HTTPS 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.

# 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

Uruchamiając lokalnie funkcje Bazy danych czasu rzeczywistego, musisz podać odpowiednie dane testowe. Ogólnie oznacza to dostarczenie nowych danych testowych dla operacji onCreate , starych/usuniętych danych dla operacji onDelete , a także dla 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 wyśmiewania 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

Gdy uruchamiasz funkcje Firestore lokalnie, musisz podać odpowiednie dane testowe. Ogólnie oznacza to dostarczenie nowych danych testowych dla operacji onCreate , starych/usuniętych danych dla operacji onDelete , a także dla funkcji onUpdate i 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 zaszyfrować 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 ​​naśladuje zdarzenie tworzenia/aktualizacji/usuwania, tak jakby zostało to 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 analityczne

Funkcję Analytics można wywołać bez żadnych danych, uruchamiając w myAnalyticsFunction() . Aby uruchomić funkcję z danymi testowymi, zaleca się zdefiniowanie zmiennej dla określonych pól danych zdarzenia, których potrzebuje Twoja funkcja:

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

Wywołaj funkcje przechowywania, uwierzytelniania i Crashlytics

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

Określ tylko pola, od których zależy Twój kod, lub nie określ w ogóle, jeśli chcesz tylko uruchomić funkcję.