Firebase CLI menyertakan emulator Cloud Functions yang dapat meniru jenis fungsi berikut:
- fungsi HTTPS
- Fungsi yang dapat dipanggil
- Fungsi latar belakang dipicu dari Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, dan Cloud Pub/Sub.
Anda dapat menjalankan fungsi secara lokal untuk mengujinya sebelum diterapkan ke produksi.
Instal Firebase CLI
Untuk menggunakan emulator Cloud Functions, instal Firebase CLI terlebih dahulu:
npm install -g firebase-tools
Untuk menggunakan emulator lokal, Cloud Functions Anda harus bergantung pada:
-
firebase-admin
versi8.0.0
atau lebih tinggi. -
firebase-functions
versi3.0.0
atau lebih tinggi.
Siapkan 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 sudah memiliki kredensial yang 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 di bagian ini. Ini berlaku baik Anda menggunakan shell Cloud Functions atau
firebase emulators:start
.
Untuk menyiapkan kredensial admin untuk fungsi yang diemulasi:
- Buka panel Akun Layanan di Google Cloud Console.
- Pastikan akun layanan default App Engine dipilih, dan gunakan menu opsi di sebelah kanan untuk memilih Buat kunci .
- Saat diminta, pilih JSON untuk jenis kunci, dan klik Create .
Setel kredensial default Google Anda untuk mengarah ke kunci yang diunduh:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase emulators:start
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase emulators:start
Setelah menyelesaikan langkah-langkah ini, pengujian fungsi Anda dapat mengakses Firebase dan Google API menggunakan Admin SDK . Misalnya, saat menguji pemicu Autentikasi, fungsi yang diemulasi dapat memanggil admin.auth().getUserByEmail(email)
.
Atur konfigurasi fungsi (opsional)
Jika Anda menggunakan variabel konfigurasi fungsi khusus, pertama-tama jalankan perintah untuk mendapatkan konfigurasi khusus Anda (jalankan ini di 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
Jalankan paket emulator
Untuk menjalankan emulator Cloud Functions, gunakan perintah emulators:start
:
firebase emulators:start
Perintah emulators:start
akan memulai emulator untuk Cloud Functions, Cloud Firestore, Realtime Database, dan Firebase Hosting berdasarkan produk yang telah Anda inisialisasi di proyek lokal Anda menggunakan firebase init
. Jika Anda ingin memulai emulator tertentu, gunakan flag --only
:
firebase emulators:start --only functions
Jika Anda ingin menjalankan rangkaian pengujian atau skrip pengujian setelah emulator dimulai, gunakan perintah emulators:exec
:
firebase emulators:exec "./my-test.sh"
Instrumen aplikasi Anda untuk berkomunikasi dengan emulator
Untuk memperlengkapi aplikasi Anda untuk berinteraksi dengan emulator, Anda mungkin perlu melakukan beberapa konfigurasi tambahan.
Instrumen aplikasi Anda untuk fungsi callable
Jika prototipe dan aktivitas pengujian Anda melibatkan fungsi backend yang dapat dipanggil, konfigurasikan interaksi dengan emulator Cloud Functions for Firebase seperti ini:
Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val functions = Firebase.functions functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFunctions functions = FirebaseFunctions.getInstance(); functions.useEmulator("10.0.2.2", 5001);
Cepat
Functions.functions().useFunctionsEmulator(origin: "http://localhost:5001")
Web version 9
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "localhost", 5001);
Web version 8
firebase.functions().useEmulator("localhost", 5001);
Instrumen aplikasi Anda untuk emulasi fungsi HTTPS
Setiap fungsi HTTPS dalam kode Anda akan disajikan dari emulator lokal menggunakan format URL berikut:
http:// $HOST : $PORT / $PROJECT / $REGION / $NAME
Misalnya fungsi helloWorld
sederhana dengan port dan wilayah host default akan disajikan di:
https://localhost:5001/ $PROJECT /us-central1/helloWorld
Lengkapi aplikasi Anda untuk emulasi fungsi yang dipicu latar belakang
Emulator Cloud Functions mendukung fungsi yang dipicu latar belakang dari sumber berikut:
- Emulator Basis Data Waktu Nyata
- Emulator Cloud Firestore
- Emulator otentikasi
- Emulator Pub/Sub
Untuk memicu kejadian latar belakang, ubah sumber daya back-end menggunakan UI Emulator Suite, atau dengan menghubungkan aplikasi atau kode pengujian Anda ke emulator menggunakan SDK untuk platform Anda.
Penangan uji untuk peristiwa khusus yang dipancarkan oleh Ekstensi
Untuk fungsi yang Anda implementasikan untuk menangani kejadian khusus Firebase Extensions dengan Cloud Functions v2, emulator Cloud Functions berpasangan dengan emulator Eventarc untuk mendukung pemicu Eventarc .
Untuk menguji pengendali peristiwa khusus untuk ekstensi yang mengeluarkan peristiwa, Anda harus menginstal emulator Cloud Functions dan Eventarc.
Runtime Cloud Functions menyetel variabel lingkungan EVENTARC_EMULATOR
ke localhost:9299
dalam proses saat ini jika emulator Eventarc sedang berjalan. Firebase Admin SDK secara otomatis terhubung ke emulator Eventarc saat variabel lingkungan EVENTARC_EMULATOR
disetel. Anda dapat memodifikasi port default seperti yang dibahas di bawah Configure Local Emulator Suite .
Saat variabel lingkungan dikonfigurasi dengan benar, Firebase Admin SDK secara otomatis mengirimkan kejadian ke emulator Eventarc. Pada gilirannya, emulator Eventarc melakukan panggilan kembali ke emulator Cloud Functions untuk memicu semua penangan terdaftar.
Anda dapat memeriksa log Fungsi di UI Emulator Suite untuk mengetahui detail tentang eksekusi handler.
Interaksi dengan layanan lain
Suite emulator menyertakan beberapa emulator, yang memungkinkan pengujian interaksi lintas produk.
Toko Api Awan
Jika Anda memiliki fungsi yang menggunakan Firebase Admin SDK untuk menulis ke Cloud Firestore, penulisan ini akan dikirim ke emulator Cloud Firestore jika sedang berjalan. Jika fungsi lebih lanjut dipicu oleh penulisan tersebut, fungsi tersebut akan dijalankan di emulator Cloud Functions.
Penyimpanan awan
Jika Anda memiliki fungsi yang menggunakan Firebase Admin SDK (versi 9.7.0 atau lebih tinggi) untuk menulis ke Cloud Storage, penulisan ini akan dikirim ke emulator Cloud Storage jika sedang berjalan. Jika fungsi lebih lanjut dipicu oleh penulisan tersebut, fungsi tersebut akan dijalankan di emulator Cloud Functions.
Otentikasi Firebase
Jika Anda memiliki fungsi yang menggunakan Firebase Admin SDK (versi 9.3.0 atau lebih tinggi) untuk menulis ke Firebase Authentication, penulisan ini akan dikirim ke emulator Auth jika sedang berjalan. Jika fungsi lebih lanjut dipicu oleh penulisan tersebut, fungsi tersebut akan dijalankan di emulator Cloud Functions.
Hosting Firebase
Jika Anda menggunakan Cloud Functions untuk menghasilkan konten dinamis untuk Firebase Hosting , firebase emulators:start
menggunakan fungsi HTTP lokal Anda sebagai proxy untuk hosting.
Penebangan
Emulator mengalirkan log dari fungsi Anda ke jendela terminal tempatnya dijalankan. Ini menampilkan semua output dari pernyataan console.log()
, console.info()
, console.error()
, dan console.warn()
di dalam fungsi Anda.
Langkah selanjutnya
Untuk contoh lengkap penggunaan paket emulator Firebase, lihat contoh panduan memulai pengujian .