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ü, özlü kural dillerine dayanır. Ancak, kurallar uzadıkça ve karmaşıklaştıkça, davranışlarındaki hataları ayıklamak için biraz yardıma ihtiyacınız olabilir.

Firebase Öykünücüleri, bir hatayı yeniden oluşturduğunuzda her bir alt ifadenin tam olarak neyi değerlendirdiğini görebilmeniz için kural kapsamı raporları oluşturma özelliğini içerir. Raporlar ayrıca, geleneksel "hat kapsamı" teknikleri gibi her bir test senaryosunun bir kuralı ne sıklıkta kullandığı hakkında 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, öykünücü ç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 böler. 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>
 

Hata ayıklama örneği kuralları

Kolayca bir test raporu oluşturmak için, emülatör için GitHub'dan geçerli Quickstarts kullanmak Bulut Firestore ve Gerçek Zamanlı Veritabanı . Bu hızlı başlangıçlar, öykünücüleri doğru şekilde kurmanız ve başlatmanız, ardından örnek bir kurallar kümesinden örnek testler oluşturmanız konusunda size rehberlik eder.

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:

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

Öykünücü, 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ğer hatalarını gösterir:

Bu özel örnekle ilgili sorun, kuralların belgeyi oluşturma ve belgeyi güncelleme arasında ayrım yapmamasıdır. Sonuç olarak, belge yoksa yazmaya izin verilmez ve belge mevcut olmadığı için oluşturulamaz. "Yazmayı" iki özel işleme daha ayırmak - "oluştur" ve "güncelle" - 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 kuralın ne sıklıkta kullanıldığını ve neyin döndürüldüğünü gösterir.