I am assuming you're referring to firestore when you say you want to 'reset the data'.
Per the documentation at https://firebase.google.com/docs/emulator-suite/install_and_configure#use_the_emulator_hub_rest_api
import fetch from 'node-fetch';
import firebaseConfig from '../../../firebase.json';
const hubEmulatorPort = firebaseConfig.emulators.hub.port;
const firestoreEmulatorPort = firebaseConfig.emulators.firestore.port;
async function clearDb() {
const response = await fetch(
`http://localhost:${firestoreEmulatorPort}/emulator/v1/projects/${process.env.PROJECT_ID}/databases/(default)/documents`,
{
method: 'DELETE',
}
);
if (response.status !== 200) {
throw new Error('Trouble clearing Emulator: ' + (await response.text()));
}
}
async function populateDb(data) {
// Logic for adding in any data you want in the db
// before each test run
}
async function enableBackgroundTriggers() {
const response = await fetch(`http://localhost:${hubEmulatorPort}/functions/enableBackgroundTriggers`, {
method: 'PUT',
});
if (response.status !== 200) {
throw new Error('Trouble enabling database triggers in emulator: ' + (await response.text()));
}
}
async function disableBackgroundTriggers() {
const response = await fetch(`http://localhost:${hubEmulatorPort}/functions/disableBackgroundTriggers`, {
method: 'PUT',
});
if (response.status !== 200) {
throw new Error('Trouble disabling database triggers in emulator: ' + (await response.text()));
}
}
async function resetDb(data) {
await disableBackgroundTriggers();
await clearDb();
await populateDb(data);
await enableBackgroundTriggers();
}
export { resetDb };
I can't find a source for the clearing of the db, but the RESTful call in clearDb does what you want.
It's important to disable the triggers before clearing or populating the database, in case you have firestore triggers that modify data in ways your tests don't expect. I write tests by passing full DB state to the populateDb method, then reenable triggers before running tests so I can test said triggers. If you aren't running any firestore triggers, the clearDb call alone should be enough for your purposes.
My tests all have calls to resetDb() in my beforeEach hook in jest to ensure clean runs of each test. I recommend adding this to whatever 'beforeEach'-like hook your favorite testing API exposes.
If your tests do things like create users in Firebase Authentication you'll have to find another way to clear them between test runs.
If anyone can find documentation on how to clear other emulators in the Firebase Emulator Suite, please drop it in the comments. I am currently trying to find a way to clear Authentication emulators, which is actually how I found this question.
Best of luck!