Conectar seu app ao emulador do Realtime Database

Antes de conectar seu app ao emulador do Realtime Database, verifique se você entendeu o fluxo de trabalho geral do Pacote de emuladores locais do Firebase , instalou e configurou o Pacote de emuladores locais e analisou os comandos da CLI.

Escolha um projeto do Firebase

O Pacote de emuladores locais 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 flag --project para cada comando do emulador.

O Pacote de emuladores locais oferece suporte à emulação de projetos reais e de demonstração do Firebase.

Tipo de projeto Recursos Usar com emuladores
Real

Um projeto real do Firebase é aquele que você criou e configurou (provavelmente pelo Console do Firebase).

Os projetos reais têm recursos ativos, como instâncias de banco de dados, buckets de armazenamento, funções ou qualquer outro recurso configurado para o projeto do Firebase.

Ao trabalhar com projetos reais do Firebase, é possível executar emuladores para qualquer um ou todos os produtos suportados.

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 do Firebase não tem configuração real nem recursos ativos. Em geral, esses projetos são acessados usando codelabs ou outros tutoriais.

Os IDs dos projetos de demonstração têm o prefixo demo-.

Ao trabalhar com projetos de demonstração do Firebase, os apps e códigos interagem apenas com emuladores. Se o app tentar interagir com um recurso em que um emulador não esteja em execução, o código falhará.

Recomendamos que você use projetos de demonstração sempre que possível. Alguns dos benefícios 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

Instrua o app a se comunicar com os emuladores

SDKs do Android, da Apple e da Web

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

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val database = Firebase.database
database.useEmulator("10.0.2.2", 9000)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseDatabase database = FirebaseDatabase.getInstance();
database.useEmulator("10.0.2.2", 9000);
Swift
    // In almost all cases the ns (namespace) is your project ID.
let db = Database.database(url:"http://127.0.0.1:9000?ns=YOUR_DATABASE_NAMESPACE")

API modular da Web

import { getDatabase, connectDatabaseEmulator } from "firebase/database";

const db = getDatabase();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  connectDatabaseEmulator(db, "127.0.0.1", 9000);
} 

API com namespace da Web

var db = firebase.database();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  db.useEmulator("127.0.0.1", 9000);
} 

Nenhuma outra configuração é necessária para testar funções do Cloud acionadas por eventos do Realtime Database usando o emulador. Quando os emuladores do Realtime Database 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 Realtime Database quando a variável de ambiente FIREBASE_DATABASE_EMULATOR_HOST é definida:

export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

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 initializeApp.

Se você quiser que o código do SDK Admin se conecte a um emulador compartilhado em execução em outro ambiente, especifique o mesmo ID do projeto definido usando a CLI do Firebase. É possível transmitir um ID do projeto para initializeApp diretamente ou definir a variável de ambiente GCLOUD_PROJECT.

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

Limpe o banco de dados entre os testes

Para esvaziar o Realtime Database entre as atividades, limpe a referência do banco de dados. Use essa abordagem como uma alternativa ao simples encerramento do processo do emulador.

Kotlin+KTX
// With a DatabaseReference, write null to clear the database.
database.reference.setValue(null)
Java
// With a DatabaseReference, write null to clear the database.
database.getReference().setValue(null);
Swift
// With a DatabaseReference, write nil to clear the database.
    Database.database().reference().setValue(nil);

API modular da Web

import { getDatabase, ref, set } from "firebase/database";

// With a database Reference, write null to clear the database.
const db = getDatabase();
set(ref(db), null);

API com namespace da Web

// With a database Reference, write null to clear the database.
firebase.database().ref().set(null);

Naturalmente, o código deve aguardar a confirmação de que a limpeza foi concluída ou falhou usando os recursos de manipulação de eventos assíncronos da sua plataforma.

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 para Firebase 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 o exporte para que seja 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 flag --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.

Confira a atividade das 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 de emuladores locais.

Veja as avaliações de regras

Ao adicionar regras de segurança ao protótipo, é possível depurá-las com as ferramentas do Pacote de emuladores locais.

Depois de executar um conjunto de testes, é possível acessar relatórios de cobertura de teste 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:9000/.inspect/coverage?ns=<database_name>

Isso divide as 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:9000/.inspect/coverage.json?ns=<database_name>

A seguir