Menghasilkan laporan pengujian

Cloud Firestore dan Realtime Database mengandalkan bahasa aturan yang kuat dan ringkas, yang khusus dibuat untuk mengatur keamanan dan kontrol akses informasi. Namun, karena aturan menjadi semakin panjang dan kompleks, Anda mungkin memerlukan bantuan terkait proses debug error dalam perilakunya.

Firebase Emulator mencakup kemampuan untuk menghasilkan laporan cakupan aturan, sehingga Anda dapat melihat dengan tepat apa yang dievaluasi setiap subekspresi saat Anda mereproduksi error. Laporan tersebut juga memberikan informasi tentang frekuensi penggunaan aturan pada setiap kasus uji, seperti teknik "cakupan garis" tradisional.

Membuat laporan

Setelah menjalankan serangkaian pengujian, Anda dapat mengakses laporan cakupan pengujian yang menunjukkan bagaimana setiap aturan keamanan Anda dievaluasi.

Untuk mendapatkan laporan tersebut, buat kueri untuk endpoint yang terekspos pada emulator selagi emulator berjalan. Untuk versi yang cocok dengan browser, gunakan URL berikut:

Cloud Firestore

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
 

Realtime Database

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 evaluasi dan nilai yang ditampilkan. Untuk versi JSON mentah data ini, sertakan URL berikut dalam kueri Anda:

Cloud Firestore

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
 

Realtime Database

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

Aturan contoh proses debug

Untuk membuat laporan pengujian dengan mudah, gunakan quickstart emulator yang tersedia di GitHub untuk Cloud Firestore dan Realtime Database. Quickstart ini akan memandu Anda dalam menginstal dan memulai emulator dengan benar, kemudian membuat pengujian sampel dari serangkaian aturan contoh.

Pertimbangkan contoh aplikasi yang menggunakan Cloud Firestore yang menghitung berapa kali pengguna mengklik sebuah tombol. Aplikasi ini menggunakan aturan berikut:

Cloud Firestore

 service cloud.firestore {
   match /databases/{database}/documents {
     match /counters/{counter} {
       allow read;
       allow write: if request.resource.data.value == resource.data.value +1;
     }
   }
 }
 

Untuk proses debug error dalam aturan yang ditunjukkan di atas, gunakan sampel pengujian JavaScript berikut:

const counter0 = db.collection("counters").doc("0");
await firebase.assertSucceeds(counter0.set({value: 0}));

Emulator menghasilkan laporan yang tersedia pada URL di atas:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

Laporan ini menunjukkan error nilai yang tidak terdefinisi dan null seperti berikut:

Masalah pada contoh khusus ini adalah bahwa aturan tidak membedakan antara membuat dokumen dan memperbarui dokumen. Akibatnya, penulisan tidak diizinkan jika dokumen tidak ada, dan dokumen tidak dapat dibuat karena tidak ada. Membedakan "tulis" menjadi dua operasi yang lebih spesifik — "buat" dan "perbarui" — akan menyelesaikan masalah.

Cloud Firestore

 service cloud.firestore {
   match /databases/{database}/documents {
     match /counters/{counter} {
       allow read;
       allow create: if request.resource.data.value == 0;
       allow update: if request.resource.data.value == resource.data.value +1;
     }
   }
 }
 

Laporan yang dibuat menunjukkan frekuensi penggunaan setiap aturan dan yang dihasilkan.