Test raporları oluşturma

Hem Cloud Firestore hem de Realtime Database etkili ve kısa kural dilleri kullanır özel olarak bilgi güvenliği ve erişim denetimini yönetmek için oluşturulmuştur. 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 sorgunuzda:

Cloud Firestore

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

Realtime Database

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

Hata ayıklama örnek kuralları

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 kaç kez saydığını gösteren, Cloud Firestore kullanan örnek bir uygulama düşünün bir düğmeyi tıklayı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ü.