Use o emulador do Firestore localmente
A CLI do Google Cloud oferece um emulador local na memória para o Firestore que pode usar para testar a sua aplicação. Pode usar o emulador com todas as bibliotecas cliente do Firestore. Deve usar o emulador apenas para testes locais.
Não use o emulador para implementações de produção. Uma vez que o emulador armazena dados apenas na memória, não mantém os dados entre execuções.
Instale o emulador
Para instalar o emulador do Firestore, instale e atualize a CLI gcloud:
Atualize a instalação da CLI gcloud para receber as funcionalidades mais recentes:
gcloud components update
Execute o emulador
Execute o seguinte comando para iniciar o emulador:
gcloud emulators firestore start
O emulador imprime o anfitrião e o número da porta onde está a ser executado.
Por predefinição, o emulador tenta usar
127.0.0.1:8080
. Para associar o emulador a um anfitrião e uma porta específicos, use a flag--host-port
opcional, substituindo HOST e PORT:gcloud emulators firestore start --host-port=HOST:PORT
Escreva
Control + C
para parar o emulador. O emulador também pode ser parado com um POST para/shutdown
. Por exemplo:curl -d '' HOST:PORT/shutdown
Estabeleça ligação ao emulador
A forma como se liga ao emulador depende do tipo de biblioteca de cliente, biblioteca de cliente de servidor ou SDK para dispositivos móveis/Web.
Bibliotecas cliente do servidor
Para ligar uma biblioteca cliente do servidor do Firestore (C#, Go, Java, Node.js, PHP, Python e Ruby),
defina a variável de ambiente FIRESTORE_EMULATOR_HOST
. Quando esta variável de ambiente está definida, as bibliotecas de cliente do servidor ligam-se automaticamente ao emulador.
export FIRESTORE_EMULATOR_HOST="HOST:PORT"
Android, plataformas Apple e SDKs Web
Os exemplos seguintes demonstram como ligar as plataformas Android e Apple, e os SDKs Web ao emulador do Firestore:
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);
Swift
let settings = Firestore.firestore().settings settings.host = "127.0.0.1:8080" settings.cacheSettings = MemoryCacheSettings() settings.isSSLEnabled = false Firestore.firestore().settings = settings
Versão Web 9
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore"; // firebaseApps previously initialized using initializeApp() const db = getFirestore(); connectFirestoreEmulator(db, '127.0.0.1', 8080);
Versão Web 8
// Firebase previously initialized using firebase.initializeApp(). var db = firebase.firestore(); if (location.hostname === "localhost") { db.useEmulator("127.0.0.1", 8080); }
O emulador do Firestore no modo nativo limpa o conteúdo da base de dados quando é encerrado. Uma vez que a cache offline do SDK do Firestore não é limpa automaticamente, é recomendável desativar a persistência local na configuração do emulador para evitar discrepâncias entre a base de dados emulada e as caches locais. No SDK Web, a persistência está desativada por predefinição.
Limpe os dados do emulador
O emulador do Firestore inclui um ponto final REST para eliminar todos os dados atualmente no emulador. Pode usar este ponto final para limpar dados entre testes sem encerrar o emulador.
Para eliminar todos os dados no emulador, execute uma operação HTTP DELETE
no seguinte ponto final, substituindo HOST e PORT pelo anfitrião e pela porta que selecionou, e substituindo PROJECT_ID pelo seu próprio ID do projeto:
http://HOST:PORT/emulator/v1/projects/PROJECT_ID/databases/(default)/documents
Ajuste o anfitrião e a porta se o emulador não usar 127.0.0.1:8080
.
O seu código deve aguardar a confirmação REST de que a eliminação foi concluída ou falhou.
Pode realizar esta operação a partir da shell com curl
:
$ curl -v -X DELETE "http://HOST:PORT/emulator/v1/projects/PROJECT_ID/databases/(default)/documents"
Como o emulador do Firestore difere da produção
O emulador do Firestore tenta replicar fielmente o comportamento do serviço de produção com algumas limitações notáveis.
Transações
O emulador não tenta imitar o comportamento das transações observado na produção. Usa uma abordagem de bloqueio simples e não tenta replicar os vários modos de concorrência oferecidos no ambiente de produção.
Quando estiver a testar funcionalidades que envolvem várias escritas simultâneas num documento, o emulador pode demorar a concluir os pedidos de escrita. O emulador pode demorar até 30 segundos a libertar os bloqueios. Se precisar de ajustar os intervalos de tempo limite do teste, faça-o.
O emulador também não tenta imitar todos os limites de produção, como os limites de tempo limite e de tamanho, que envolvem transações. Se testar funcionalidades que dependem destes limites de produção, recomendamos que use um ambiente de produção em vez de um emulador.
Índices
O emulador não acompanha os índices compostos e, em vez disso, executa qualquer consulta válida. Certifique-se de que testa a sua app com uma instância real do Firestore para determinar os índices de que precisa.
Limites
O emulador não aplica todos os limites aplicados na produção. Por exemplo, o emulador pode permitir transações que seriam rejeitadas como demasiado grandes pelo serviço de produção. Certifique-se de que conhece os limites documentados e que cria a sua app para os evitar proativamente.