Test raporları oluşturma

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

Firebase Emulators, kural kapsamı raporları oluşturma özelliğini içerir. Böylece bir hatayı yeniden oluşturduğunuzda her bir alt ifadenin tam olarak neye karşılık geldiğini görebilirsiniz. Raporlar, her test senaryosunun geleneksel "satır kapsamı" teknikleri gibi bir kuralı ne sıklıkta kullandığı hakkında da bilgi sağlar.

Rapor oluşturma

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 emülatördeki herkese açık bir uç noktayı sorgulayın. 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ı ifadeler ve alt ifadeler halinde ayırır. Değerlendirme sayısı ve döndürülen değerler gibi daha fazla bilgi için imleçle bu ifadelerin üzerine gelebilirsiniz. Bu verilerin ham JSON sürümü için sorgunuza aşağıdaki URL'yi ekleyin:

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 Cloud Firestore ve Realtime Database için GitHub'da bulunan emülatör hızlı başlangıç kılavuzlarını kullanın. Bu hızlı başlangıç kılavuzları, emülatörlerin doğru şekilde yüklenmesi ve başlatılması, ardından örnek bir kural grubundan örnek testler oluşturma konusunda size yol gösterir.

Kullanıcıların bir düğmeyi kaç kez tıkladığını sayan Cloud Firestore kullanan bir örnek 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 ö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 kullanılabilen bir rapor oluşturur:

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

Raporda aşağıdaki tanımlanmamış ve boş değer hataları gösterilir:

Bu örnekteki sorun, kuralların doküman oluşturma ve doküman güncelleme arasında ayrım yapmamasıdır. Dolayısıyla, doküman mevcut değilse yazma işlemine izin verilmez ve doküman mevcut olmadığı için oluşturulamaz. "Yazma" işlemini iki daha ayrıntılı işleme ("oluşturma" ve "güncelleme") ayırmak sorunu çö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 neyin döndürüldüğü gösterilir.