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

Connectez votre application à l'émulateur de base de données en temps réel

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Avant de connecter votre application à l'émulateur de base de données en temps réel, assurez-vous que vous comprenez le flux de travail global de Firebase Local Emulator Suite , et que vous installez et configurez Local Emulator Suite et passez en revue ses commandes CLI .

Choisissez un projet Firebase

La suite d'émulateurs locaux Firebase émule des produits pour un seul projet Firebase.

Pour sélectionner le projet à utiliser, avant de démarrer les émulateurs, dans la CLI, exécutez firebase use dans votre répertoire de travail. Ou, vous pouvez passer l'indicateur --project à chaque commande de l'émulateur.

Local Emulator Suite prend en charge l'émulation de projets Firebase réels et de projets de démonstration .

Type de projet Fonctionnalités Utiliser avec des émulateurs
Réel

Un vrai projet Firebase est celui que vous avez créé et configuré (très probablement via la console Firebase).

Les projets réels ont des ressources actives, telles que des instances de base de données, des compartiments de stockage, des fonctions ou toute autre ressource que vous avez configurée pour ce projet Firebase.

Lorsque vous travaillez avec de vrais projets Firebase, vous pouvez exécuter des émulateurs pour tout ou partie des produits pris en charge.

Pour tous les produits que vous n'émulez pas, vos applications et votre code interagiront avec la ressource active (instance de base de données, compartiment de stockage, fonction, etc.).

Démo

Un projet de démonstration Firebase n'a pas de véritable configuration Firebase ni de ressources en direct. Ces projets sont généralement accessibles via des ateliers de programmation ou d'autres didacticiels.

Les ID de projet pour les projets de démonstration ont le préfixe demo- .

Lorsque vous travaillez avec des projets Firebase de démonstration, vos applications et votre code interagissent uniquement avec les émulateurs . Si votre application tente d'interagir avec une ressource pour laquelle un émulateur n'est pas en cours d'exécution, ce code échouera.

Nous vous recommandons d'utiliser des projets de démonstration dans la mesure du possible. Les avantages incluent :

  • Configuration plus facile, car vous pouvez exécuter les émulateurs sans jamais créer de projet Firebase
  • Sécurité renforcée, car si votre code invoque accidentellement des ressources non émulées (de production), il n'y a aucune chance de modification, d'utilisation et de facturation des données
  • Meilleure prise en charge hors ligne, car il n'est pas nécessaire d'accéder à Internet pour télécharger votre configuration SDK.

Instrumentez votre application pour parler aux émulateurs

Plateformes Android, Apple et SDK Web

Configurez votre configuration dans l'application ou testez les classes pour interagir avec la base de données en temps réel comme suit.

Android
        // 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);
Rapide
    // In almost all cases the ns (namespace) is your project ID.
let db = Database.database(url:"http://localhost:9000?ns=YOUR_DATABASE_NAMESPACE")

Web version 9

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

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

Web version 8

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

Aucune configuration supplémentaire n'est nécessaire pour tester les fonctions Cloud déclenchées par les événements de la base de données en temps réel à l'aide de l'émulateur. Lorsque les émulateurs Realtime Database et Cloud Functions sont en cours d'exécution, ils fonctionnent automatiquement ensemble.

SDK d'administration

Les SDK Firebase Admin se connectent automatiquement à l'émulateur de base de données en temps réel lorsque la variable d'environnement FIREBASE_DATABASE_EMULATOR_HOST est définie :

export FIREBASE_DATABASE_EMULATOR_HOST="localhost:9000"

Si votre code s'exécute dans l'émulateur Cloud Functions, votre ID de projet et une autre configuration seront automatiquement définis lors de l'appel initalizeApp .

Si vous souhaitez que votre code SDK Admin se connecte à un émulateur partagé s'exécutant dans un autre environnement, vous devrez spécifier le même ID de projet que celui que vous avez défini à l'aide de la CLI Firebase . Vous pouvez transmettre un ID de projet à initializeApp directement ou définir la variable d'environnement GCLOUD_PROJECT .

SDK d'administration Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variable d'environnement
export GCLOUD_PROJECT="your-project-id"

Videz votre base de données entre les tests

Pour vider la base de données en temps réel entre les activités, vous pouvez effacer la référence de la base de données. Vous pouvez utiliser cette approche comme alternative à la simple fermeture du processus de l'émulateur.

Android
// With a DatabaseReference, write null to clear the database.
database.getReference().setValue(null);
Rapide
// With a DatabaseReference, write nil to clear the database.
    Database.database().reference().setValue(nil);

Web version 9

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 version 8

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

Naturellement, votre code doit attendre la confirmation que le vidage s'est terminé ou a échoué à l'aide des fonctionnalités de gestion des événements asynchrones de votre plate-forme.

Après avoir implémenté une étape comme celle-ci, vous pouvez séquencer vos tests et déclencher vos fonctions en toute confiance que les anciennes données seront purgées entre les exécutions et que vous utilisez une nouvelle configuration de test de référence.

Importer et exporter des données

La base de données et les émulateurs Cloud Storage pour Firebase vous permettent d'exporter des données à partir d'une instance d'émulateur en cours d'exécution. Définissez un ensemble de données de base à utiliser dans vos tests unitaires ou vos workflows d'intégration continue, puis exportez-le pour le partager avec l'équipe.

firebase emulators:export ./dir

Dans les tests, au démarrage de l'émulateur, importez les données de référence.

firebase emulators:start --import=./dir

Vous pouvez demander à l'émulateur d'exporter les données à l'arrêt, soit en spécifiant un chemin d'exportation, soit en utilisant simplement le chemin passé à l'indicateur --import .

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

Ces options d'importation et d'exportation de données fonctionnent également avec la firebase emulators:exec . Pour plus d'informations, reportez-vous à la référence des commandes de l'émulateur .

Visualiser l'activité des règles de sécurité

Lorsque vous travaillez sur des prototypes et des boucles de test, vous pouvez utiliser les outils de visualisation et les rapports fournis par Local Emulator Suite.

Visualiser les évaluations des règles

Lorsque vous ajoutez des règles de sécurité à votre prototype, vous pouvez les déboguer avec les outils Local Emulator Suite.

Après avoir exécuté une suite de tests, vous pouvez accéder à des rapports de couverture de test qui montrent comment chacune de vos règles a été évaluée. Pour obtenir les rapports, interrogez un point de terminaison exposé sur l'émulateur pendant son exécution. Pour une version conviviale pour les navigateurs, utilisez l'URL suivante :

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

Cela décompose vos règles en expressions et sous-expressions que vous pouvez survoler avec la souris pour plus d'informations, y compris le nombre d'exécutions et les valeurs renvoyées. Pour la version JSON brute de ces données, incluez l'URL suivante dans votre requête :

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

Et ensuite ?