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

Gerar relatórios de teste

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

O Cloud Firestore e o Realtime Database contam com linguagens de regras poderosas e concisas criadas especificamente para governar a segurança da informação e o controle de acesso. No entanto, à medida que as regras se tornam mais longas e complexas, você pode precisar de ajuda para depurar erros em seu comportamento.

Os emuladores do Firebase incluem a capacidade de gerar relatórios de cobertura de regras, para que você possa ver exatamente o que cada subexpressão avalia ao reproduzir um erro. Os relatórios também fornecem informações sobre a frequência com que cada caso de teste usou uma regra, como as técnicas tradicionais de "cobertura de linha".

Gerar um relatório

Depois de executar um conjunto de testes, você pode acessar relatórios de cobertura de teste que mostram como cada uma de suas regras de segurança foi avaliada.

Para obter os relatórios, consulte um ponto de extremidade exposto no emulador durante a execução. Para uma versão amigável ao navegador, use o seguinte URL:

Cloud Firestore

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

banco de dados em tempo real

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

Isso divide suas regras em expressões e subexpressões nas quais você pode passar o mouse para obter mais informações, incluindo o número de avaliações e valores retornados. Para a versão JSON bruta desses dados, inclua o seguinte URL em sua consulta:

Cloud Firestore

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

banco de dados em tempo real

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

Regras de exemplo de depuração

Para gerar facilmente um relatório de teste, use os inícios rápidos do emulador disponíveis no GitHub para Cloud Firestore e Realtime Database . Esses inícios rápidos orientam você na instalação e inicialização apropriada dos emuladores e, em seguida, na geração de testes de amostra a partir de um conjunto de regras de exemplo.

Considere um aplicativo de exemplo usando o Cloud Firestore que conta quantas vezes os usuários clicam em um botão. O aplicativo emprega as seguintes regras:

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

Para depurar os erros nas regras mostradas acima, use o seguinte exemplo de teste de JavaScript:

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

O emulador gera um relatório disponível na URL indicada acima:

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

O relatório mostra os seguintes erros indefinidos e de valor nulo:

O problema com este exemplo específico é que as regras não diferenciam entre criar o documento e atualizar o documento. Consequentemente, a gravação não é permitida se o documento não existir e o documento não pode ser criado porque não existe. Diferenciar a "gravação" em duas operações mais específicas — "criar" e "atualizar" — resolve o problema.

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

O relatório gerado mostra com que frequência cada regra foi usada e o que foi retornado.