Avant de connecter votre application à l'émulateur Realtime Database, assurez-vous de bien comprendre le workflow global Firebase Local Emulator Suite, d' installer et de configurer le Local Emulator Suite et de consulter ses commandes CLI.
Choisir un projet Firebase
Le Firebase Local Emulator Suite émule des produits pour un seul projet Firebase.
Pour sélectionner le projet à utiliser, avant de démarrer les émulateurs, exécutez firebase use dans votre répertoire de travail dans la CLI. Vous pouvez également transmettre
le --project flag à chaque commande d'émulateur.
Local Emulator Suite permet d'émuler des projets Firebase réels et des projets de démonstration.
| Type de projet | Fonctionnalités | Utilisation avec des émulateurs |
|---|---|---|
| Réel |
Un projet Firebase réel est un projet que vous avez créé et configuré (très probablement via la Firebase console). Les projets réels comportent des ressources actives, telles que des instances de base de données, des buckets de stockage, des fonctions ou toute autre ressource que vous avez configurée pour ce projet Firebase. |
Lorsque vous travaillez avec des projets Firebase réels, vous pouvez exécuter des émulateurs pour tout ou partie des produits compatibles. 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, bucket de stockage, fonction, etc.). |
| Démonstration |
Un projet Firebase de démonstration ne comporte aucune configuration Firebase réelle ni aucune ressource active. Ces projets sont généralement accessibles via des ateliers de programmation ou d'autres tutoriels. Les ID de projet des projets de démonstration sont précédés du préfixe |
Lorsque vous travaillez avec des projets Firebase de démonstration, vos applications et votre code interagissent avec des émulateurs uniquement. Si votre application tente d'interagir avec une ressource pour laquelle aucun émulateur n'est en cours d'exécution, ce code échoue. |
Nous vous recommandons d'utiliser des projets de démonstration dans la mesure du possible. Voici quelques-uns de ses avantages :
- 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 appelle accidentellement des ressources non émulées (de production), il n'y a aucun risque de modification des données, d'utilisation ni de facturation
- Meilleure prise en charge hors connexion, car il n'est pas nécessaire d'accéder à Internet pour télécharger la configuration de votre SDK.
Instrumenter votre application pour qu'elle communique avec les émulateurs
SDK Android, Apple et Web
Configurez vos classes de test ou de configuration intégrées à l'application pour interagir avec le Realtime Database comme suit.
Kotlin
// 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); }
Aucune configuration supplémentaire n'est nécessaire pour tester les fonctions Cloud déclenchées par des événements Realtime Database à l'aide de l'émulateur. Lorsque les émulateurs Realtime Database et Cloud Functions sont tous deux en cours d'exécution, ils fonctionnent automatiquement ensemble.
Admin SDKs
Les Firebase Admin SDK se connectent automatiquement à l'émulateur Realtime Database 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 d'autres configurations sont automatiquement définis lorsque vous appelez initializeApp.
Si vous souhaitez que votre Admin SDK code se connecte à un émulateur partagé s'exécutant dans
un autre environnement, vous devez 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 directement à initializeApp ou définir la variable d'environnement GCLOUD_PROJECT.
SDK Admin Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variable d'environnement
export GCLOUD_PROJECT="your-project-id"
Effacer votre base de données entre les tests
Pour vider le Realtime Database entre les activités, vous pouvez effacer la référence de la base de données. Vous pouvez utiliser cette approche au lieu d'arrêter simplement le processus de l'émulateur.
Kotlin
// 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);
Naturellement, votre code doit attendre la confirmation que le vidage a réussi ou échoué à l'aide des fonctionnalités de gestion des événements asynchrones de votre plate-forme.
Une fois cette étape implémentée, vous pouvez séquencer vos tests et déclencher vos fonctions en étant sûr que les anciennes données seront supprimées entre les exécutions et que vous utilisez une configuration de test de référence à jour.
Importer et exporter des données
Les émulateurs de base de données et Cloud Storage for 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 référence à utiliser dans vos tests unitaires ou vos workflows d'intégration continue, puis exportez-le pour le partager avec l'équipe.
firebase emulators:export ./dirLors des tests, au démarrage de l'émulateur, importez les données de référence.
firebase emulators:start --import=./dirVous pouvez demander à l'émulateur d'exporter des données à l'arrêt, en spécifiant un chemin d'exportation ou en utilisant simplement le chemin transmis au flag --import.
firebase emulators:start --import=./dir --export-on-exitCes options d'importation et d'exportation de données fonctionnent également avec la commande firebase emulators:exec. Pour en savoir plus, consultez la documentation de référence sur les commandes d'émulateur
.
Visualiser l'activité des règles de sécurité
Lorsque vous travaillez sur des boucles de prototype et de test, vous pouvez utiliser les outils de visualisation et les rapports fournis par la Local Emulator Suite.
Visualiser les évaluations de règles
Lorsque vous ajoutez des règles de sécurité à votre prototype, vous pouvez les déboguer à l'aide des Local Emulator Suite outils.
Après avoir exécuté une suite de tests, vous pouvez accéder à des rapports sur la couverture des tests 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 adaptée aux navigateurs, utilisez l'URL suivante :
http://localhost:9000/.inspect/coverage?ns=<database_name>
Vos règles sont divisées en expressions et sous-expressions sur lesquelles vous pouvez passer la souris pour obtenir 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 maintenant ?
- Pour obtenir un ensemble organisé de vidéos et d'exemples pratiques détaillés, suivez la playlist de formation sur les émulateurs Firebase.
- Découvrez des cas d'utilisation avancés impliquant des tests de règles de sécurité et le SDK Firebase Test : Tester les règles de sécurité (Realtime Database).
- Étant donné que les fonctions déclenchées sont une intégration typique à Realtime Database, découvrez en plus sur l'émulateur Cloud Functions for Firebase dans Exécuter des fonctions localement.