Test raporları oluşturun

Cloud Firestore ve Realtime Database, bilgi güvenliğini ve erişim kontrolünü yönetmek için özel olarak oluşturulmuş güçlü, kısa ve öz kural dillerine dayanır. Ancak kurallar uzadıkça ve karmaşıklaştıkça davranışlarındaki hataları ayıklamak için yardıma ihtiyacınız olabilir.

Firebase Emülatörleri, kural kapsamı raporları oluşturma yeteneğini içerir; böylece bir hatayı yeniden oluşturduğunuzda her alt ifadenin tam olarak neye göre değerlendirildiğini görebilirsiniz. Raporlar ayrıca, geleneksel "hat kapsamı" teknikleri gibi, her test senaryosunun bir kuralı ne sıklıkta kullandığı hakkında da bilgi sağlar.

Rapor oluştur

Bir dizi test çalıştırdıktan sonra, güvenlik kurallarınızın her birinin nasıl değerlendirildiğini gösteren test kapsamı raporlarına erişebilirsiniz.

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

Bulut Firestore

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

Gerçek Zamanlı Veritabanı

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

Bu, kurallarınızı, değerlendirme sayısı ve döndürülen değerler de dahil olmak üzere daha fazla bilgi için fareyle üzerine gelebileceğiniz ifadelere ve alt ifadelere ayırır. Bu verilerin ham JSON sürümü için sorgunuza aşağıdaki URL'yi ekleyin:

Bulut Firestore

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

Gerçek Zamanlı Veritabanı

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

Örnek kurallarda hata ayıklama

Kolayca bir test raporu oluşturmak için GitHub'da Cloud Firestore ve Realtime Database için mevcut olan emülatör hızlı başlangıçlarını kullanın. Bu hızlı başlangıçlar, öykünücüleri doğru şekilde kurmanız ve başlatmanız ve ardından örnek bir kural kümesinden örnek testler oluşturmanız konusunda size yol gösterir.

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

Bulut 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 örnek JavaScript testini kullanın:

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

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

Bu özel örnekteki sorun, kuralların belgeyi oluşturma ile belgeyi güncelleme arasında ayrım yapmamasıdır. Sonuç olarak, belge mevcut değilse yazmaya izin verilmez ve belge mevcut olmadığı için oluşturulamaz. "Yazma" işlemini daha spesifik iki işleme - "oluşturma" ve "güncelleme" - ayırmak sorunu çözer.

Bulut 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 rapor, her bir kuralın ne sıklıkta kullanıldığını ve nelerin döndürüldüğünü gösterir.