了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

İşlevleri etkileşimli olarak test edin

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

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

İşlev testlerinizin Firebase Admin SDK aracılığıyla Google API'leri veya diğer Firebase API'leri ile etkileşime girmesini 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, bu bölümde açıklanan kurulum adımlarını gerektirir. Bu, Cloud Functions kabuğunu veya firebase emulators:start kullanıyor olsanız da geçerlidir.

Öykünülmüş işlevler için yönetici kimlik bilgilerini ayarlamak üzere:

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

    Unix

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

    pencereler

    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 tetikleyicisini test ederken öykünülmüş işlev admin.auth().getUserByEmail(email) çağırabilir.

Bir Cloud Functions kabuğu kullanarak işlevleri sunun

Cloud Functions kabuğu, işlevleri test verileriyle çağırmak için etkileşimli bir kabukla tüm işlev tetikleyici türlerine öykünür. Seçenekler fonksiyon tipine göre değişiklik gösterir ancak temel kullanım formatı şöyledir:

myFunctionName(data, options)

data parametresi Realtime Database, Cloud Firestore ve PubSub tetikleyicileri için gereklidir 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.

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

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

Cloud Functions kabuğunu kurun ve yapılandırın

Bu özelliği kullanmak için, firebase-tools minimum sürüm 3.11.0'a ve firebase-functions SDK'nın minimum sürüm 0.6.2'ye sahip olması gerekir. Her ikisini 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 dizini içinde ç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ğır

Kabukta HTTPS işlevlerini çağırmak için kullanım, request NPM modülüyle aynıdır, ancak request öykünmek istediğiniz işlevin adıyla değiştirin. Ö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şlevlerini çağırın

HTTPS Callable 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 iletebilirsiniz. Bu bir dizi olmalıdır.

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

context.auth öykünmesi şu anda kullanılamıyor.

Gerçek Zamanlı Veritabanı işlevlerini çağırın

Gerçek Zamanlı Veritabanı 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ılan veriler ve hem onUpdate hem de onWrite işlevleri için 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' })

before/after seçeneklerine ek olarak, kabuk, bir yoldaki joker karakterlerle alay etmek için params seçeneğini sağlar:

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

Kabuk, varsayılan olarak yönetici (hizmet hesabı) ayrıcalıklarıyla Gerçek Zamanlı Veritabanı işlevlerini çalıştırır. Bunun yerine iş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 verilerini sağlamanız gerekir. Bu genellikle onCreate işlemleri için yeni test verilerinin, onDelete işlemleri için eski/kaldırılan verilerin ve hem onUpdate hem de onWrite işlevleri için sağlanması anlamına gelir. Firestore verilerinin anahtar/değer çiftleri olması gerektiğini unutmayın; bkz . Desteklenen Veri Türleri .

# 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 alay 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, Firestore işlevlerini her zaman yönetici ayrıcalıklarıyla çalıştırır; bu, bir oluşturma/güncelleme/silme olayıyla sanki bir yönetici kullanıcı tarafından yapılmış gibi alay ettiği anlamına gelir.

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 özniteliklerini 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 bir Analytics işlevini çağırabilirsiniz. İşlevi test verileriyle çalıştırmak için, işlevinizin ihtiyaç duyduğu belirli olay 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);

Depolama ve Kimlik Doğrulama işlevlerini çağırın

Storage ve Auth işlevleri için, işlevin içinde görmek istediğiniz test verileriyle yerel işlevi çağırın. Test verileriniz ilgili veri formatlarını takip etmelidir:

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