Test raporları oluşturma

Hem Cloud Firestore hem de Realtime Database, bilgi güvenliğini ve erişim denetimini yönetmek için özel olarak tasarlanmış güçlü ve kısa kurallar dillerinden yararlanır. Ancak, ve kurallar uzadıkça ve karmaşıklaştıkça hata ayıklama konusunda yardıma ihtiyacınız olabilir teşvik eder.

Firebase Emülatörleri, kural kapsamı raporları oluşturma özelliğini içerir. Böylece, yeniden oluşturduğunuz sırada her bir alt ifadenin tam olarak neye değerlendirildiğini bir hata. Raporlar ayrıca her testin ne sıklıkla yapıldığıyla ilgili de bilgi verir vakada geleneksel "satır kapsamı" gibi bir kural kullanılır teknikleri.

Rapor oluşturma

Bir dizi test çalıştırdıktan sonra teste erişebilirsiniz. kapsam raporları arasında yer alır.

Raporları almak için, çalışırken emülatörde açık uç noktayı sorgulayın. çalışıyor. Tarayıcı dostu bir sürüm için aşağıdaki URL'yi kullanın:

Cloud Firestore

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

Realtime Database

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

Bu, kurallarınızı daha sonra kolayca kullanabileceğiniz ifadelere ve alt ifadelere Değerlendirme ve değer sayısı da dahil olmak üzere daha fazla bilgi için fareyle üzerine gelin geri döndü. Bu verilerin ham JSON sürümü için aşağıdaki URL'yi ekleyin kullanabilirsiniz:

Cloud Firestore

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

Realtime Database

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

Örnek kurallarda hata ayıklama

Test raporunu kolayca oluşturmak için şurada bulunan emülatör hızlı başlangıç kılavuzlarını kullanın: Cloud Firestore ve Realtime Database için GitHub. Bu hızlı başlangıç kılavuzları düzgün şekilde yüklemenize yardımcı olur emülatörleri başlatma ve ardından bir örnekten örnek testler oluşturma olacaktır.

Kullanıcıların bir düğmeyi kaç kez tıkladığını sayan Cloud Firestore kullanan örnek bir uygulama düşünün. Uygulama aşağıdaki kuralları kullanır:

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

Yukarıda gösterilen kurallardaki hataları ayıklamak için aşağıdaki örneği kullanın JavaScript testi:

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

Emülatör, yukarıda belirtilen URL'de bulunan bir rapor oluşturur:

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

Raporda aşağıdaki tanımsız ve boş değerli hatalar gösterilir:

Bu özel örnekteki sorun, kuralların birbirinden farklı ve güncelleme arasında geçiş yapmaktır. Sonuç olarak, veya dokümanın mevcut olmaması durumunda yazma işlemine izin verilmez. mevcut olmadığı için oluşturuldu. "Yazma"yı ayırt etme ikiye daha spesifik işlemler — "create" ve "update" problemi çözer.

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

Oluşturulan raporda her kuralın ne sıklıkta kullanıldığı ve geri döndü.