Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Создание тестовых отчетов

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

Cloud Firestore и Realtime Database опираются на мощные, краткие языки правил, специально созданные для управления информационной безопасностью и контролем доступа. Однако по мере того, как правила становятся длиннее и сложнее, вам может понадобиться помощь в устранении ошибок в их поведении.

Эмуляторы Firebase включают возможность генерировать отчеты о покрытии правил, поэтому вы можете точно увидеть, что оценивается каждым подвыражением при воспроизведении ошибки. Отчеты также предоставляют информацию о том, как часто в каждом тестовом случае использовалось правило, например традиционные методы «покрытия строк».

Создать отчет

После запуска набора тестов вы можете получить доступ к отчетам о покрытии тестами, которые показывают, как оценивалось каждое из ваших правил безопасности.

Чтобы получить отчеты, запросите открытую конечную точку в эмуляторе во время его работы. Для удобной для браузера версии используйте следующий URL-адрес:

Облако Firestore

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

База данных реального времени

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

Это разбивает ваши правила на выражения и подвыражения, на которые вы можете навести указатель мыши для получения дополнительной информации, включая количество вычислений и возвращаемых значений. Чтобы получить необработанную версию этих данных в формате JSON, включите в запрос следующий URL-адрес:

Облако Firestore

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

База данных реального времени

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

Пример правил отладки

Чтобы легко создать отчет о тестировании, воспользуйтесь кратким руководством по эмулятору, доступным на GitHub для Cloud Firestore и Realtime Database . Эти краткие руководства помогут вам правильно установить и инициализировать эмуляторы, а затем создать образцы тестов на основе примерного набора правил.

Рассмотрим пример приложения, использующего Cloud Firestore, которое подсчитывает, сколько раз пользователи нажимают кнопку. Приложение использует следующие правила:

Облако Firestore

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

Чтобы отладить ошибки в приведенных выше правилах, используйте следующий пример теста JavaScript:

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

Эмулятор создает отчет, доступный по указанному выше URL-адресу:

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

В отчете показаны следующие неопределенные ошибки и ошибки с нулевым значением:

Проблема с этим конкретным примером заключается в том, что правила не различают создание документа и обновление документа. Следовательно, запись не разрешена, если документ не существует, и документ не может быть создан, поскольку он не существует. Разделение «записи» на две более конкретные операции — «создание» и «обновление» — решает проблему.

Облако 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;
     }
   }
 }
 

Сгенерированный отчет показывает, как часто использовалось каждое правило и что было возвращено.