İşlevleri etkileşimli olarak test edin

Cloud Functions kabuğu, test verileriyle işlevleri çağırmak için etkileşimli bir kabuk sunar. Kabuk tüm tetikleyici türlerini destekler.

Yönetici kimlik bilgilerini ayarlayın (isteğe bağlı)

İşlevler testlerinizin Firebase Admin SDK üzerinden Google API'leri veya diğer Firebase API'leriyle etkileşim kurmasını istiyorsanız yönetici kimlik bilgilerini ayarlamanız gerekebilir.

  • Cloud Firestore ve Realtime Database tetikleyicileri zaten yeterli kimlik bilgilerine sahiptir ve ek kurulum gerektirmez.
  • Authentication ve FCM gibi Firebase API'leri ya da Cloud Translation veya Cloud Speech gibi Google API'leri dahil olmak üzere diğer tüm API'ler için bu bölümde açıklanan kurulum adımları gerekir. Cloud Functions kabuğu veya firebase emulators:start kullanmanız fark etmeksizin bu koşul geçerlidir.

Öykünülen işlevlere yönelik yönetici kimlik bilgilerini ayarlamak için:

  1. Google Cloud Console'un Hizmet Hesapları bölmesini açın.
  2. App Engine varsayılan hizmet hesabı'nın seçildiğinden emin olun ve sağdaki seçenekler menüsünü kullanarak Anahtar oluştur'u seçin.
  3. İstendiğinde anahtar türü olarak JSON'yi seçin ve Oluştur'u tıklayın.
  4. Google varsayılan kimlik bilgilerinizi, indirilen anahtara işaret edecek şekilde ayarlayın:

    Unix

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

    Windows

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

Bu adımları tamamladıktan sonra, işlev testleriniz Admin SDK'yı kullanarak Firebase ve Google API'lerine erişebilir. Örneğin, bir Kimlik Doğrulama tetikleyicisi test edilirken emüle edilen işlev admin.auth().getUserByEmail(email) yöntemini çağırabilir.

İşlevleri Cloud Functions kabuğu kullanarak sunma

Cloud Functions kabuğu, işlevleri test verileriyle çağırmak için etkileşimli bir kabuk ile her tür işlev tetikleyicisinin emülasyonunu yapar. Seçenekler işlev türüne göre değişir, ancak temel kullanım biçimi şu şekildedir:

myFunctionName(data, options)

data parametresi; Realtime Database, Cloud Firestore ve PubSub tetikleyicileri için zorunlu, diğer tüm işlev türleri için isteğe bağlıdır. Ayrıca, isteğe bağlı options parametresi yalnızca Realtime Database ve Cloud Firestore işlevleri için geçerlidir.

İsteğe bağlı olarak, dosyayı değişken olarak kaydedip onunla bir işlev çağırarak bir yerel dosyadan test verilerini yükleyebilirsiniz:

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

Cloud Functions kabuğunu yükleme ve yapılandırma

Bu özelliği kullanmak için firebase-tools sürümü minimum 3.11.0, firebase-functions SDK ise minimum 0.6.2 sürümüne sahip olmalıdır. İkisini de güncellemek için projenizin functions/ dizininde aşağıdaki komutları çalıştırın:

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

Özel işlevler yapılandırma değişkenleri kullanıyorsanız önce yerel ortamınızda özel yapılandırmanızı almak için komutu çalıştırın (bunu functions dizininde çalıştırın):

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

Son olarak, aşağıdaki komutla kabuğu çalıştırın:

firebase functions:shell

HTTPS işlevlerini çağırma

Kabuk içinde HTTPS işlevlerini çağırmak için kullanım request AİOY modülüyle aynıdır ancak request kısmını, emüle etmek istediğiniz işlevin adıyla değiştirin. Örnek:

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

HTTPS Çağırılabilir işlevlerini çağırma

HTTPS Çağrılabilir işlevlerini yerel olarak çağırırken uygun test verilerini sağlamanız gerekir.

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

İsteğe bağlı olarak, ikinci parametre olarak bir Firebase-Instance-ID-token aktarabilirsiniz. Bu bir dize olmalıdır.

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

context.auth emülasyonu şu anda kullanılamıyor.

Realtime Database işlevlerini çağırma

Realtime Database işlevlerini yerel olarak çalıştırırken uygun test verileri sağlamanız gerekir. Bu genellikle onCreate işlemleri için yeni test verileri, onDelete işlemleri için ve onUpdate veya onWrite işlevleri için eski/kaldırılmış veriler sağlamak anlamına gelir:

# invoke onCreate function
myDatabaseFunction('new_data')

# invoke onDelete function
myDatabaseFunction('old_data')

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

Kabuk, before/after seçeneklerine ek olarak bir yoldaki sahte joker karakterlerde kullanmak için params seçeneği sunar:

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

Varsayılan olarak kabuk, Realtime Database işlevlerini yönetici (hizmet hesabı) ayrıcalıklarıyla çalıştırır. İşlevleri belirli bir son kullanıcı veya kimliği doğrulanmamış kullanıcı olarak çalıştırmak için auth seçeneğini kullanın:

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

Firestore işlevlerini çağırma

Firestore işlevlerini yerel olarak çalıştırırken uygun test verileri sağlamanız gerekir. Bu genellikle onCreate işlemleri için yeni test verileri, onDelete işlemleri için ve onUpdate veya onWrite işlevleri için eski/kaldırılmış veriler sağlamak anlamına gelir. Firestore verilerinin anahtar/değer çiftleri olması gerektiğini unutmayın. Desteklenen Veri Türleri bölümünü inceleyin.

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

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

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

data nesnesinin before/after alanlarına ek olarak, bir belge adındaki joker karakterlerle taklit etmek için options nesnesindeki params alanlarını kullanabilirsiniz:

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

Kabuk, her zaman yönetici ayrıcalıklarıyla Firestore işlevlerini çalıştırır. Diğer bir deyişle, oluşturma/güncelleme/silme etkinliği bir yönetici tarafından yapılmış gibi taklit edilir.

PubSub işlevlerini çağırma

PubSub işlevleri için mesaj yükünüzü bir Buffer örneğine ekleyin ve isteğe bağlı olarak veri özelliklerini aşağıda gösterildiği gibi ekleyin:

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

Analytics işlevlerini çağırma

Kabukta myAnalyticsFunction() komutunu çalıştırarak herhangi bir veri olmadan Analytics işlevini çağırabilirsiniz. İşlevi test verileriyle çalıştırmak üzere işlevinizin ihtiyaç duyduğu belirli etkinlik verisi alanları için bir değişken tanımlamanız önerilir:

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

Storage ve Auth işlevlerini çağırma

Storage ve Auth işlevleri için yerel işlevi, işlevin içinde görmek istediğiniz test verileriyle çağırın. Test verileriniz ilgili veri biçimlerine uygun olmalıdır:

Yalnızca kodunuzun bağlı olduğu alanları belirtin. Yalnızca işlevi çalıştırmak istiyorsanız hiçbir şeyi belirtmeyin.