Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Hubungkan aplikasi Anda ke Realtime Database Emulator

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Sebelum menghubungkan aplikasi Anda ke emulator Realtime Database, pastikan Anda memahami keseluruhan alur kerja Firebase Local Emulator Suite , dan Anda menginstal dan mengonfigurasi Local Emulator Suite dan meninjau perintah CLI -nya.

Pilih proyek Firebase

Firebase Local Emulator Suite mengemulasikan produk untuk satu proyek Firebase.

Untuk memilih project yang akan digunakan, sebelum Anda memulai emulator, di CLI jalankan firebase use di direktori kerja Anda. Atau, Anda dapat meneruskan flag --project ke setiap perintah emulator.

Local Emulator Suite mendukung emulasi proyek Firebase nyata dan proyek demo .

Jenis proyek Fitur Gunakan dengan emulator
Nyata

Proyek Firebase sebenarnya adalah proyek yang Anda buat dan konfigurasikan (kemungkinan besar melalui konsol Firebase).

Proyek nyata memiliki sumber daya langsung, seperti instance database, keranjang penyimpanan, fungsi, atau sumber daya lain yang Anda siapkan untuk proyek Firebase tersebut.

Saat bekerja dengan proyek Firebase nyata, Anda dapat menjalankan emulator untuk salah satu atau semua produk yang didukung.

Untuk produk apa pun yang tidak Anda tiru, aplikasi dan kode Anda akan berinteraksi dengan sumber daya langsung (instance database, keranjang penyimpanan, fungsi, dll.).

Demo

Proyek demo Firebase tidak memiliki konfigurasi Firebase nyata dan tidak memiliki sumber daya langsung. Project ini biasanya diakses melalui codelab atau tutorial lainnya.

ID Proyek untuk proyek demo memiliki awalan demo- .

Saat bekerja dengan proyek demo Firebase, aplikasi dan kode Anda hanya berinteraksi dengan emulator . Jika aplikasi Anda mencoba berinteraksi dengan sumber daya yang emulatornya tidak berjalan, kode tersebut akan gagal.

Kami menyarankan Anda menggunakan proyek demo sedapat mungkin. Manfaat meliputi:

  • Penyiapan yang lebih mudah, karena Anda dapat menjalankan emulator tanpa harus membuat proyek Firebase
  • Keamanan yang lebih kuat, karena jika kode Anda secara tidak sengaja mengaktifkan sumber daya (produksi) yang tidak ditiru, tidak ada kemungkinan perubahan data, penggunaan, dan penagihan
  • Dukungan offline yang lebih baik, karena tidak perlu mengakses internet untuk mengunduh konfigurasi SDK Anda.

Instrumen aplikasi Anda untuk berkomunikasi dengan emulator

Android, platform Apple, dan Web SDK

Siapkan konfigurasi dalam aplikasi atau class pengujian untuk berinteraksi dengan Realtime Database sebagai 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);
Cepat
    // In almost all cases the ns (namespace) is your project ID.
let db = Database.database(url:"http://localhost:9000?ns=YOUR_DATABASE_NAMESPACE")

Web version 9

import { getDatabase, connectDatabaseEmulator } from "firebase/database";

const db = getDatabase();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  connectDatabaseEmulator(db, "localhost", 9000);
} 

Web version 8

var db = firebase.database();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  db.useEmulator("localhost", 9000);
} 

Tidak diperlukan penyiapan tambahan untuk menguji Cloud Functions yang dipicu oleh kejadian Realtime Database menggunakan emulator. Saat emulator Realtime Database dan Cloud Functions berjalan, keduanya akan bekerja bersama secara otomatis.

SDK Admin

Firebase Admin SDK secara otomatis terhubung ke emulator Realtime Database saat variabel lingkungan FIREBASE_DATABASE_EMULATOR_HOST ditetapkan:

export FIREBASE_DATABASE_EMULATOR_HOST="localhost:9000"

Jika kode Anda dijalankan di dalam emulator Cloud Functions, project ID Anda dan konfigurasi lainnya akan disetel secara otomatis saat memanggil initalizeApp .

Jika Anda ingin kode Admin SDK terhubung ke emulator bersama yang berjalan di lingkungan lain, Anda harus menentukan ID proyek yang sama dengan yang Anda atur menggunakan Firebase CLI . Anda dapat meneruskan ID proyek untuk initializeApp Aplikasi secara langsung atau menyetel variabel lingkungan GCLOUD_PROJECT .

SDK Admin Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variabel Lingkungan
export GCLOUD_PROJECT="your-project-id"

Bersihkan basis data Anda di antara pengujian

Untuk menghapus Realtime Database di antara aktivitas, Anda dapat menghapus referensi database. Anda dapat menggunakan pendekatan ini sebagai alternatif untuk sekadar mematikan 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);
Cepat
// With a DatabaseReference, write nil to clear the database.
    Database.database().reference().setValue(nil);

Web version 9

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 version 8

// With a database Reference, write null to clear the database.
firebase.database().ref().set(null);

Secara alami, kode Anda harus menunggu konfirmasi bahwa flush selesai atau gagal menggunakan fitur penanganan peristiwa asinkron pada platform Anda.

Setelah menerapkan langkah seperti ini, Anda dapat mengurutkan pengujian dan memicu fungsi dengan keyakinan bahwa data lama akan dihapus di antara proses dan Anda menggunakan konfigurasi pengujian dasar yang baru.

Mengimpor dan mengekspor data

Basis data dan emulator Cloud Storage for Firebase memungkinkan Anda mengekspor data dari instance emulator yang sedang berjalan. Tentukan kumpulan data dasar untuk digunakan dalam pengujian unit atau alur kerja integrasi berkelanjutan, lalu ekspor untuk dibagikan di antara tim.

firebase emulators:export ./dir

Dalam pengujian, saat memulai emulator, impor data baseline.

firebase emulators:start --import=./dir

Anda dapat menginstruksikan emulator untuk mengekspor data saat dimatikan, baik dengan menentukan jalur ekspor atau cukup menggunakan jalur yang diteruskan ke tanda --import .

firebase emulators:start --import=./dir --export-on-exit

Opsi impor dan ekspor data ini juga berfungsi dengan perintah firebase emulators:exec . Untuk lebih lanjut, lihat referensi perintah emulator .

Visualisasikan aktivitas Aturan Keamanan

Saat Anda mengerjakan prototipe dan loop pengujian, Anda dapat menggunakan alat visualisasi dan laporan yang disediakan oleh Local Emulator Suite.

Visualisasikan evaluasi Aturan

Saat Anda menambahkan Aturan Keamanan ke prototipe Anda, Anda dapat men-debugnya dengan alat Local Emulator Suite.

Setelah menjalankan rangkaian pengujian, Anda dapat mengakses laporan cakupan pengujian yang menunjukkan bagaimana setiap aturan Anda dievaluasi. Untuk mendapatkan laporan, kueri endpoint yang terekspos pada emulator saat sedang berjalan. Untuk versi ramah browser, gunakan URL berikut:

http://localhost:9000/.inspect/coverage?ns=<database_name>

Ini memecah aturan Anda menjadi ekspresi dan subekspresi yang dapat Anda arahkan dengan mouse untuk informasi lebih lanjut, termasuk jumlah eksekusi dan nilai yang dikembalikan. Untuk versi JSON mentah dari data ini, sertakan URL berikut dalam kueri Anda:

http://localhost:9000/.inspect/coverage.json?ns=<database_name>

Apa selanjutnya?