Sebelum menghubungkan aplikasi ke emulator Realtime Database, pastikan Anda memahami keseluruhan alur kerja Firebase Local Emulator Suite, dan sudah menginstal serta mengonfigurasi Local Emulator Suite dan mengetahui perintah CLI-nya.
Memilih project Firebase
Firebase Local Emulator Suite mengemulasi produk untuk satu project Firebase.
Untuk memilih project yang akan digunakan, sebelum memulai emulator, jalankan firebase use
di CLI di direktori kerja Anda. Atau, Anda dapat meneruskan flag --project
ke setiap perintah emulator.
Local Emulator Suite mendukung emulasi project Firebase sungguhan dan project demo.
Jenis project | Fitur | Penggunaan dengan emulator |
---|---|---|
Sungguhan |
Project Firebase sungguhan adalah project yang Anda buat dan konfigurasikan (kemungkinan besar melalui Firebase console). Project sungguhan memiliki resource live, seperti instance database, bucket penyimpanan, fungsi, atau resource lain yang Anda siapkan untuk project Firebase tersebut. |
Jika mengerjakan project Firebase sungguhan, Anda dapat menjalankan emulator untuk salah satu atau semua produk yang didukung. Untuk produk yang tidak diemulasi, aplikasi dan kode Anda akan berinteraksi dengan resource live (instance database, bucket penyimpanan, fungsi, dsb.). |
Demo |
Project Firebase demo tidak memiliki konfigurasi Firebase sungguhan dan tidak memiliki resource live. Project ini biasanya diakses melalui codelab atau tutorial lainnya. Project ID untuk project demo memiliki awalan |
Jika menggunakan project Firebase demo, aplikasi dan kode Anda hanya berinteraksi dengan emulator. Jika aplikasi Anda mencoba berinteraksi dengan resource yang tidak dijalankan dengan emulator, kode tersebut akan gagal. |
Jika memungkinkan, sebaiknya gunakan project demo. Manfaatnya meliputi:
- Penyiapan yang lebih mudah karena Anda dapat menjalankan emulator tanpa perlu membuat project Firebase
- Keamanan yang lebih tangguh karena jika kode Anda tidak sengaja memanggil resource yang tidak diemulasi (production), tidak akan terjadi perubahan data, penggunaan, dan penagihan
- Dukungan offline yang lebih baik karena Anda tidak perlu mengakses internet untuk mendownload konfigurasi SDK.
Melengkapi aplikasi untuk berkomunikasi dengan emulator
Android, platform Apple, dan Web SDK
Siapkan konfigurasi dalam aplikasi atau class pengujian untuk berinteraksi dengan Realtime Database seperti berikut.
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 database = Firebase.database database.useEmulator("10.0.2.2", 9000)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseDatabase database = FirebaseDatabase.getInstance(); database.useEmulator("10.0.2.2", 9000);
Swift
// In almost all cases the ns (namespace) is your project ID. let db = Database.database(url:"http://127.0.0.1:9000?ns=YOUR_DATABASE_NAMESPACE")
Web
import { getDatabase, connectDatabaseEmulator } from "firebase/database"; const db = getDatabase(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. connectDatabaseEmulator(db, "127.0.0.1", 9000); }
Web
var db = firebase.database(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. db.useEmulator("127.0.0.1", 9000); }
Tidak diperlukan penyiapan tambahan untuk menguji Cloud Functions yang dipicu oleh peristiwa Realtime Database menggunakan emulator. Saat emulator Realtime Database dan emulator Cloud Functions berjalan, keduanya otomatis bekerja sama.
Admin SDK
Firebase Admin SDK otomatis terhubung ke emulator Realtime Database saat variabel lingkungan FIREBASE_DATABASE_EMULATOR_HOST
ditetapkan:
export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"
Jika kode Anda berjalan di dalam emulator Cloud Functions, project ID dan konfigurasi lainnya akan otomatis ditetapkan saat memanggil initializeApp
.
Jika ingin kode Admin SDK terhubung ke emulator bersama yang berjalan di lingkungan lain, Anda harus menentukan project ID yang sama dengan yang ditetapkan menggunakan Firebase CLI.
Anda dapat meneruskan project ID ke initializeApp
secara langsung atau menetapkan variabel lingkungan GCLOUD_PROJECT
.
Admin SDK Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variabel Lingkungan
export GCLOUD_PROJECT="your-project-id"
Mengosongkan database di antara pengujian
Untuk mengosongkan Realtime Database di antara aktivitas, Anda dapat menghapus referensi database. Anda dapat menggunakan pendekatan ini sebagai alternatif dari sekadar menonaktifkan proses emulator.
Kotlin+KTX
// With a DatabaseReference, write null to clear the database. database.reference.setValue(null)
Java
// With a DatabaseReference, write null to clear the database. database.getReference().setValue(null);
Swift
// With a DatabaseReference, write nil to clear the database. Database.database().reference().setValue(nil);
Web
import { getDatabase, ref, set } from "firebase/database"; // With a database Reference, write null to clear the database. const db = getDatabase(); set(ref(db), null);
Web
// With a database Reference, write null to clear the database. firebase.database().ref().set(null);
Tentunya, kode Anda harus menunggu konfirmasi bahwa proses pengosongan selesai atau gagal menggunakan fitur penanganan peristiwa asinkron pada platform Anda.
Setelah menerapkan langkah seperti ini, Anda dapat mengurutkan pengujian dan memicu fungsi dengan kepastian bahwa data lama akan dihapus secara permanen di antara pengujian, dan Anda akan menggunakan konfigurasi pengujian dasar pengukuran yang baru.
Mengimpor dan mengekspor data
Emulator database dan emulator Cloud Storage for Firebase dapat Anda gunakan untuk mengekspor data dari instance emulator yang sedang berjalan. Tentukan set data dasar pengukuran yang akan digunakan dalam pengujian unit atau alur kerja continuous integration, lalu ekspor untuk dibagikan kepada tim.
firebase emulators:export ./dir
Dalam pengujian, impor data dasar pengukuran saat memulai emulator.
firebase emulators:start --import=./dir
Anda dapat menginstruksikan emulator untuk mengekspor data saat penonaktifan, baik dengan menentukan jalur ekspor maupun hanya menggunakan jalur yang diteruskan ke flag --import
.
firebase emulators:start --import=./dir --export-on-exit
Opsi impor dan ekspor data ini juga berfungsi dengan perintah firebase emulators:exec
. Untuk mempelajari lebih lanjut, baca referensi perintah emulator.
Memvisualisasikan aktivitas Aturan Keamanan
Saat mengerjakan prototipe dan loop pengujian, Anda dapat menggunakan laporan dan alat visualisasi yang disediakan oleh Local Emulator Suite.
Memvisualisasikan evaluasi Aturan
Saat menambahkan Aturan Keamanan ke prototipe, Anda dapat mendebugnya dengan alat Local Emulator Suite.
Setelah menjalankan serangkaian pengujian, Anda dapat mengakses laporan cakupan pengujian yang menunjukkan bagaimana setiap aturan Anda dievaluasi. Untuk mendapatkan laporan tersebut, buat kueri untuk endpoint yang terekspos pada emulator selagi emulator berjalan. Untuk versi yang mudah digunakan di browser, gunakan URL berikut:
http://localhost:9000/.inspect/coverage?ns=<database_name>
Proses ini memecah aturan Anda menjadi beberapa ekspresi dan subekspresi, dan Anda dapat mengarahkan mouse ke ekspresi/subekspresi tersebut untuk melihat informasinya lebih lanjut, termasuk jumlah eksekusi dan nilai yang ditampilkan. Untuk versi JSON mentah data ini, sertakan URL berikut dalam kueri Anda:
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
Apa selanjutnya?
- Untuk melihat kumpulan video pilihan dan contoh petunjuk mendetail, ikuti Playlist Pelatihan Emulator Firebase.
- Pelajari kasus penggunaan lanjutan yang melibatkan pengujian Aturan Keamanan dan Firebase Test SDK: Menguji Aturan Keamanan (Realtime Database).
- Karena fungsi yang dipicu adalah integrasi standar dengan Realtime Database, pelajari lebih lanjut emulator Cloud Functions for Firebase di artikel Menjalankan fungsi secara lokal.