Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Generar informes de prueba

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Cloud Firestore y Realtime Database se basan en lenguajes de reglas potentes y concisos creados específicamente para gobernar la seguridad de la información y el control de acceso. Sin embargo, a medida que las reglas se vuelven más largas y complejas, es posible que necesite ayuda para depurar errores en su comportamiento.

Los emuladores de Firebase incluyen la capacidad de generar informes de cobertura de reglas, por lo que puede ver exactamente cómo se evaluó cada subexpresión cuando reprodujo un error. Los informes también proporcionan información sobre la frecuencia con la que cada caso de prueba utilizó una regla, como las técnicas tradicionales de "cobertura de línea".

Generar un informe

Después de ejecutar un conjunto de pruebas, puede acceder a los informes de cobertura de prueba que muestran cómo se evaluó cada una de sus reglas de seguridad.

Para obtener los informes, consulta un extremo expuesto en el emulador mientras se está ejecutando. Para obtener una versión compatible con el navegador, use la siguiente URL:

Tienda de fuego en la nube

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

Base de datos en tiempo real

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

Esto divide sus reglas en expresiones y subexpresiones sobre las que puede pasar el mouse para obtener más información, incluida la cantidad de evaluaciones y valores devueltos. Para la versión JSON sin procesar de estos datos, incluya la siguiente URL en su consulta:

Tienda de fuego en la nube

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

Base de datos en tiempo real

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

Reglas de ejemplo de depuración

Para generar fácilmente un informe de prueba, use los inicios rápidos del emulador disponibles en GitHub para Cloud Firestore y Realtime Database . Estos inicios rápidos lo guían a través de la instalación e inicialización correctas de los emuladores, y luego generan pruebas de muestra a partir de un conjunto de reglas de ejemplo.

Considere una aplicación de ejemplo que usa Cloud Firestore que cuenta cuántas veces los usuarios hacen clic en un botón. La aplicación emplea las siguientes reglas:

Tienda de fuego en la nube

 service cloud.firestore {
   match /databases/{database}/documents {
     match /counters/{counter} {
       allow read;
       allow write: if request.resource.data.value == resource.data.value +1;
     }
   }
 }
 

Para depurar los errores en las reglas que se muestran arriba, use la siguiente prueba de JavaScript de muestra:

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

El emulador genera un informe disponible en la URL mencionada anteriormente:

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

El informe muestra los siguientes errores indefinidos y de valor nulo:

El problema con este ejemplo específico es que las reglas no diferencian entre crear el documento y actualizarlo. En consecuencia, la escritura no está permitida si el documento no existe y el documento no se puede crear porque no existe. Diferenciar la "escritura" en dos operaciones más específicas, "crear" y "actualizar", resuelve el problema.

Tienda de fuego en la nube

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

El informe generado muestra con qué frecuencia se usó cada regla y qué se devolvió.