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 |
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")
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); }
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);
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);
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
- Para ver um conjunto selecionado de vídeos e exemplos detalhados de instruções, siga a playlist de treinamento dos emuladores do Firebase.
- Investigue casos de uso avançados que envolvam testes de regras de segurança e o SDK de teste do Firebase: Testar regras de segurança (Realtime Database).
- Como as funções acionadas são uma integração típica com o Realtime Database, saiba mais sobre o emulador do Cloud Functions para Firebase em Executar funções localmente.