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 | Caractéristiques | 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 | 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.
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);
Rapide
// 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 modular API
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 namespaced API
var db = firebase.database(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. db.useEmulator("127.0.0.1", 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="127.0.0.1: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.
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);
Rapide
// With a DatabaseReference, write nil to clear the database. Database.database().reference().setValue(nil);
Web modular API
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 namespaced API
// 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 base.
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 commande 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 ?
- Pour un ensemble de vidéos organisées et des exemples détaillés de procédures, suivez la liste de lecture de formation Firebase Emulators .
- Étudiez des cas d'utilisation avancés impliquant des tests de règles de sécurité et le SDK de test Firebase : testez les règles de sécurité (base de données en temps réel) .
- Étant donné que les fonctions déclenchées sont une intégration typique avec la base de données en temps réel, apprenez-en plus sur l'émulateur Cloud Functions pour Firebase sur Exécuter les fonctions localement .