İşlevleri etkileşimli olarak test etme

Cloud Functions kabuğu, test verileriyle işlevlerin çağrılması için etkileşimli bir kabuk sağlar. Kabuk, tüm tetikleyici türlerini destekler.

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

İşlevler testlerinizin, Firebase Admin SDK'sı aracılığıyla Google API'leri veya diğer Firebase API'leriyle etkileşimde bulunması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 veya Cloud Translation ya da 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ının uygulanması gerekir. Bu, Cloud Functions kabuğunu veya firebase emulators:start'i kullanıyor olmanız fark etmez.

Yansıtılan işlevler için yönetici kimlik bilgilerini ayarlamak üzere:

  1. Google Cloud konsolunun 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ü için JSON'u seçin ve Oluştur'u tıklayın.
  4. Google varsayılan kimlik bilgilerinizi indirilen anahtarı 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'sını kullanarak Firebase ve Google API'lerine erişebilir. Örneğin, bir Authentication tetikleyicisi test edilirken taklit edilen işlev admin.auth().getUserByEmail(email)'u çağırabilir.

İşlevleri Cloud Functions kabuğu kullanarak sunma

Cloud Functions kabuğu, işlevleri test verileriyle çağırmaya yönelik etkileşimli bir kabukla tüm işlev tetikleyici türlerini taklit eder. Seçenekler işlev türüne göre değişir ancak temel kullanım biçimi şudur:

myFunctionName(data, options)

data parametresi Gerçek Zamanlı Veritabanı, Cloud Firestore ve PubSub tetikleyicileri için zorunludur ve 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.

İsterseniz dosyayı bir değişken olarak kaydedip bir işlev çağırarak yerel bir dosyadan test verileri 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 en az 3.11.0 sürümüne, firebase-functions SDK'sının ise en az 0.6.2 sürümüne sahip olması gerekir. İ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şlev yapılandırma değişkenleri kullanıyorsanız yerel ortamınızda özel yapılandırmanızı almak için önce şu komutu çalıştırın (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, kabuğu aşağıdaki komutla çalıştırın:

firebase functions:shell

HTTPS işlevlerini çağırma

Kabukta HTTPS işlevlerini çağırırken kullanım, request NPM modülüyle aynıdır ancak request yerine taklit etmek istediğiniz işlevin adını girin. Örneğin:

# 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şlevleri çağırma

HTTPS çağrılabilir işlevleri 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 verilerini sağlamanız gerekir. Bu genellikle onCreate işlemleri için yeni test verileri, onDelete işlemleri için eski/kaldırılmış veriler ve onUpdate veya onWrite işlevleri için her ikisi de sağlanacağı 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 joker karakterleri taklit etmek için params seçeneğini de sunar:

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

Kabuk, varsayılan olarak Realtime Database işlevlerini yönetici (hizmet hesabı) ayrıcalıklarıyla çalıştırır. İşlevleri belirli bir son kullanıcı olarak veya kimliği doğrulanmamış bir 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, eski/kaldırılmış onDelete işlemleri ve hem onUpdate hem de onWrite işlevleri için yeni test verilerinin sağlanması anlamına gelir. Firestore verilerinin anahtar/değer çiftleri olması gerektiğini unutmayın. Desteklenen Veri Türleri başlıklı makaleyi 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 doküman adındaki joker karakterleri taklit etmek için options nesnesindeki params alanlarını da kullanabilirsiniz:

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

Kabuk, Firestore işlevlerini her zaman yönetici ayrıcalıklarıyla çalıştırır. Yani bir oluşturma/güncelleme/silme etkinliğini yönetici bir kullanıcı tarafından yapılmış gibi taklit eder.

PubSub işlevlerini çağırma

Pub/Sub işlevleri için mesaj yükünüzü bir Buffer örneğine ekleyin ve isteğe bağlı olarak veri özelliklerini aşağıdaki 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() çalıştırarak Analytics işlevini veri olmadan çağırabilirsiniz. İşlevi test verileriyle çalıştırmak için işlevinizin ihtiyaç duyduğu belirli etkinlik veri 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çimlerini izlemelidir:

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