Menguji fungsi secara interaktif

Shell Cloud Functions menyediakan shell interaktif untuk mengaktifkan fungsi dengan data pengujian. Shell ini mendukung semua jenis pemicu.

Menyiapkan kredensial admin (opsional)

Jika ingin pengujian fungsi berinteraksi dengan Google API atau Firebase API lainnya melalui Firebase Admin SDK, Anda mungkin perlu menyiapkan kredensial admin.

  • Pemicu Cloud Firestore dan Realtime Database telah memiliki kredensial memadai, dan tidak memerlukan penyiapan tambahan.
  • Semua API lainnya, termasuk Firebase API seperti Authentication dan FCM, atau Google API seperti Cloud Translation atau Cloud Speech, memerlukan langkah penyiapan yang dijelaskan dalam bagian ini. Hal ini berlaku baik jika Anda menggunakan shell Cloud Functions maupun firebase emulators:start.

Agar dapat menyiapkan kredensial admin untuk fungsi yang diemulasi:

  1. Buka panel Service Accounts di Google Cloud Console.
  2. Pastikan akun layanan default App Engine dipilih, lalu gunakan menu opsi di sebelah kanan untuk memilih Buat kunci.
  3. Saat diminta, pilih JSON untuk jenis kunci, lalu klik Buat.
  4. Atur agar kredensial default Google Anda mengarah ke kunci yang telah didownload:

    Unix

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

    Windows

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

Setelah menyelesaikan langkah-langkah ini, pengujian fungsi Anda dapat mengakses Firebase API dan Google API menggunakan Admin SDK. Misalnya, saat menguji pemicu Authentication, fungsi yang diemulasi dapat memanggil admin.auth().getUserByEmail(email).

Menyajikan fungsi menggunakan shell Cloud Functions

Shell Cloud Functions mengemulasikan semua jenis pemicu fungsi dengan shell interaktif untuk memanggil fungsi dengan data uji. Tersedia berbagai opsi berdasarkan jenis fungsinya, tetapi format penggunaan dasarnya adalah:

myFunctionName(data, options)

Parameter data diperlukan untuk pemicu Realtime Database, Cloud Firestore, dan PubSub, dan bersifat opsional untuk semua jenis fungsi lainnya. Selain itu, parameter options opsional hanya valid untuk fungsi Realtime Database dan Cloud Firestore.

Anda juga dapat memilih untuk memuat data uji dari file lokal dengan menyimpan file sebagai variabel dan memanggil fungsi dengan variabel tersebut:

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

Menginstal dan mengonfigurasi shell Cloud Functions

Untuk memanfaatkan fitur ini, gunakan firebase-tools minimal dalam versi 3.11.0, dan SDK firebase-functions minimal dalam versi 0.6.2. Untuk mengupdate keduanya, jalankan perintah berikut dalam direktori functions/ untuk project Anda:

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

Jika Anda menggunakan variabel konfigurasi fungsi kustom, jalankan perintah terlebih dahulu untuk mendapatkan konfigurasi kustom (jalankan ini dalam direktori functions) di lingkungan lokal Anda:

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

Terakhir, jalankan shell dengan perintah berikut:

firebase functions:shell

Memanggil fungsi HTTPS

Untuk memanggil fungsi HTTPS dalam shell, penggunaannya sama dengan modul NPM request, tetapi ganti request dengan nama fungsi yang ingin Anda emulasikan. Contoh:

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

Memanggil fungsi Callable HTTPS

Saat memanggil fungsi Callable HTTPS secara lokal, Anda harus menyediakan data uji yang sesuai.

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

Jika ingin, Anda dapat meneruskan Firebase-Instance-ID-token sebagai parameter kedua. Parameter ini harus berupa string.

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

Emulasi context.auth saat ini tidak tersedia.

Memanggil fungsi Realtime Database

Saat menjalankan fungsi Realtime Database secara lokal, Anda harus menyediakan data uji yang sesuai. Ini berarti Anda harus menyediakan data uji baru untuk operasi onCreate, data lama/telah dihapus untuk operasi onDelete, dan kedua jenis data tersebut untuk fungsi onUpdate atau 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' })

Selain opsi before/after, shell menyediakan opsi params untuk digunakan dalam karakter pengganti fiktif di jalur:

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

Secara default, shell menjalankan fungsi Realtime Database dengan hak istimewa admin (akun layanan). Gunakan opsi auth untuk menjalankan fungsi sebagai pengguna akhir tertentu atau sebagai pengguna yang tidak terautentikasi:

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

Memanggil fungsi Firestore

Saat menjalankan fungsi Firestore secara lokal, Anda harus menyediakan data uji yang sesuai. Ini berarti Anda harus menyediakan data uji baru untuk operasi onCreate, data lama/telah dihapus untuk operasi onDelete, dan kedua jenis data tersebut untuk fungsi onUpdate atau onWrite. Perhatikan bahwa data Firestore harus berupa key-value pair; lihat Jenis Data yang Didukung.

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

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

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

Selain kolom before/after objek data, Anda dapat menggunakan kolom params di objek options untuk membuat karakter pengganti fiktif di nama dokumen:

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

Shell selalu menjalankan fungsi Firestore dengan hak istimewa administratif, yang berarti shell meniru peristiwa buat/perbarui/hapus seolah-olah peristiwa tersebut dilakukan oleh pengguna administratif.

Memanggil fungsi PubSub

Untuk fungsi PubSub, masukkan payload pesan Anda di instance Buffer dan tambahkan atribut data opsional seperti yang ditunjukkan:

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

Memanggil fungsi Analytics

Anda dapat memanggil fungsi Analytics tanpa data dengan menjalankan myAnalyticsFunction() di shell. Untuk menjalankan fungsi dengan data uji, sebaiknya tetapkan variabel untuk kolom data peristiwa tertentu yang dibutuhkan oleh fungsi Anda:

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

Memanggil fungsi Storage dan Auth

Untuk fungsi Storage and Auth, panggil fungsi lokal dengan data uji yang Anda lihat di dalam fungsi. Data uji Anda harus mengikuti format data yang sesuai:

Tentukan kolom yang diperlukan kode Anda saja, atau tanpa kolom sama sekali jika Anda hanya ingin menjalankan fungsi.