O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Conectar seu app ao emulador do Cloud Firestore

Antes de conectar seu app ao emulador do Cloud Firestore, verifique se você entendeu o fluxo de trabalho geral do Pacote do emulador local do Firebase e que você instalou e configurou o Pacote do emulador local e analisou os comandos da CLI.

Escolher um projeto do Firebase

O pacote do emulador local do Firebase emula produtos para um único projeto.

Na CLI, execute firebase use no diretório de trabalho antes de iniciar os emuladores para selecionar o projeto a ser usado. Como opção, é possível transmitir a sinalização --project para cada comando do emulador.

O Pacote do emulador local é compatível com a emulação de projetos reais e de demonstração do Firebase.

Tipo de projeto Recursos Usar com emuladores
Real Um projeto real é aquele que você configurou e ativou no Console do Firebase. Esse projeto tem recursos ativos, como bancos de dados, buckets de armazenamento, funções ou qualquer outro recurso que você configura para o projeto. Ao trabalhar com projetos reais, é possível executar emuladores para quaisquer produtos compatíveis no projeto.

Para todos os produtos que você não estiver emulando, os apps e o código interagem com recursos ativos, como o banco de dados, o bucket de armazenamento, a função etc.
Demonstração Um projeto de demonstração não tem configuração do Console do Firebase e nenhum recurso ativo.

Os IDs dos projetos de demonstração têm o prefixo demo-.
Ao trabalhar com projetos de demonstração, os apps e códigos interagem apenas com emuladores. Se o app interagir com um recurso para o qual não há um emulador sendo executado, o código falhará.

Recomendamos que você use projetos de demonstração sempre que possível. Algumas das vantagens são:

  • configuração mais fácil, já que é possível executar os emuladores sem precisar criar um projeto do Firebase;
  • mais segurança, já que, se o código invocar acidentalmente recursos não emulados (produção), não haverá chance de alteração, uso e faturamento de dados;
  • melhor suporte off-line, já que não é necessário acessar a Internet para fazer o download da configuração do SDK.

Instruir o app a se comunicar com os emuladores

SDKs para Android, iOS e Web

Defina a configuração no app ou as classes de teste para interagir com o Cloud Firestore da conforme mostrado a seguir.

Android
        // 10.0.2.2 is the special IP address to connect to the 'localhost' of
        // the host computer from an Android emulator.
        FirebaseFirestore firestore = FirebaseFirestore.getInstance();
        firestore.useEmulator("10.0.2.2", 8080);

        FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
                .setPersistenceEnabled(false)
                .build();
        firestore.setFirestoreSettings(settings);
iOS – Swift
let settings = Firestore.firestore().settings
settings.host = "localhost:8080"
settings.isPersistenceEnabled = false
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web v8

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}

Web v9

import { getFirestore, useFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
useFirestoreEmulator(db, 'localhost', 8080);
Web
// Initialize your Web app as described in the Get started for Web
// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}

Nenhuma configuração adicional é necessária para testar o Cloud Functions acionado por eventos do Firestore usando o emulador. Quando os emuladores do Firestore e do Cloud Functions estão em execução, eles funcionam automaticamente juntos.

SDKs Admin

Os SDKs Admin do Firebase se conectam automaticamente ao emulador do Cloud Firestore quando a variável de ambiente FIRESTORE_EMULATOR_HOST é definida:

export FIRESTORE_EMULATOR_HOST="localhost:8080"

Se o código estiver sendo executado dentro do emulador do Cloud Functions, o ID do projeto e outras configurações serão definidos automaticamente ao chamar initalizeApp.

Ao se conectar ao emulador do Cloud Firestore de qualquer outro ambiente, será necessário especificar um ID do projeto. É possível transmitir um ID do projeto para initializeApp diretamente ou definir a variável de ambiente GCLOUD_PROJECT. Não é necessário usar o ID real do projeto do Firebase. O emulador do Cloud Firestore aceitará qualquer ID do projeto, desde que ele tenha um formato válido.

SDK Admin para Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variável de ambiente
export GCLOUD_PROJECT="your-project-id"

Limpar o banco de dados entre os testes

O Firestore de produção não fornece nenhum método do SDK da plataforma para limpar o banco de dados. No entanto, o emulador do Firestore fornece um endpoint REST especificamente para essa finalidade, que pode ser chamado a partir de uma etapa de configuração/eliminação do framework de teste, de uma classe de teste ou do shell (por exemplo, com curl) antes do início de um teste. Use essa abordagem como uma alternativa para simplesmente encerrar o processo do emulador.

Em um método apropriado, execute uma operação HTTP DELETE, fornecendo o ID do projeto do Firebase, por exemplo, firestore-emulator-example, para o seguinte endpoint:

"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

Naturalmente, o código deve aguardar a confirmação REST de que a limpeza foi concluída ou falhou.

É possível executar esta operação no shell:

// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

Depois de implementar uma etapa como esta, sequencie os testes e acione as funções com a certeza de que os dados antigos serão removidos entre as execuções e que você está usando uma nova configuração de teste de referência.

Importar e exportar dados

O banco de dados e os emuladores do Cloud Storage permitem exportar dados de uma instância do emulador em execução. Defina um conjunto de dados de referência para usar nos testes de unidade ou nos fluxos de trabalho de integração contínua e exporte-o para ser compartilhado com a equipe.

firebase emulators:export ./dir

Em testes, na inicialização do emulador, importe os dados de referência.

firebase emulators:start --import=./dir

Instrua o emulador a exportar dados no desligamento, especificando um caminho de exportação ou simplesmente usando o caminho transmitido para a sinalização --import.

firebase emulators:start --import=./dir --export-on-exit

Essas opções de importação e exportação de dados também funcionam com o comando firebase emulators:exec. Para saber mais, consulte a referência de comandos do emulador.

Visualizar atividades de regras de segurança

Ao trabalhar com repetições de testes e protótipos, é possível usar as ferramentas de visualização e os relatórios fornecidos pelo pacote do emulador local.

Visualizar avaliações de regras

Ao adicionar regras de segurança ao protótipo, é possível depurá-las com as ferramentas de depuração do pacote do emulador local.

Depois de executar um conjunto de testes, é possível acessar relatórios de cobertura que mostram como cada uma das regras de segurança foi avaliada.

Para acessar os relatórios, consulte um endpoint exposto no emulador enquanto ele está em execução. Para uma versão otimizada para navegadores, use o seguinte URL:

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

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

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

Aqui, a versão em HTML do relatório destaca as avaliações que geram erros indefinidos e de valor nulo:

Limitações

O emulador do Cloud Firestore tenta replicar o comportamento do serviço de produção de maneira fiel, com algumas limitações notáveis:

  • Índices O emulador não rastreia índices compostos e, em vez disso, executa uma consulta válida. Não deixe de testar o app com uma instância real do Cloud Firestore para determinar quais índices são necessários.
  • Limites O emulador não impõe todos os limites aplicados na produção. Por exemplo, o emulador pode permitir transações que são rejeitadas como muito grandes pelo serviço de produção. Verifique se você conhece os limites documentados e se desenvolve o app para evitá-los de maneira proativa.

A seguir