Firebase-js-sdk: @firebase/testing clearFirestoreData gets slower every call

Created on 1 Aug 2019  路  4Comments  路  Source: firebase/firebase-js-sdk

Describe your environment

  • Operating System version: MacOS 10.14.6
  • Browser version: not browser based
  • Firebase SDK version: @firebase/testing: 0.11.8, firebase-admin: 8.3.0
  • Firebase Product: firestore / testing
  • Jest: 24.8.0

Steps to reproduce:

Call to clearFirestoreData in the beforeEach of a test suite. Each call will take longer.

Relevant Code:

As this relies on the Firestore emulator I can't run it in an online editor. Here's the code I'm using in Jest to mock firebase-admin with @firebase/testing (__mocks__/firebase-admin.ts):

/* tslint:disable:no-var-requires */
const firebase = require('@firebase/testing')
const projectId = `myapp-${process.pid}`

beforeEach(async () => {
  console.time('clearFirestoreData') // tslint:disable-line
  await firebase.clearFirestoreData({
    projectId,
  })
  console.timeEnd('clearFirestoreData') // tslint:disable-line
})

afterAll(async () => {
  const apps = firebase.apps()
  await Promise.all(
    apps.map(async (a: any) => {
      await a.delete()
    }),
  )
})

export default {
  __esModule: true,
  firestore: firebase.firestore,
  initializeApp() {
    const app = firebase.initializeAdminApp({
      projectId,
    })
    return {
      auth() {
        return {
          createUser: jest.fn(),
          getUser: jest.fn(),
          getUserByEmail: jest.fn(),
          listUsers: jest.fn(),
          setCustomUserClaims: jest.fn(),
          updateUser: jest.fn(),
        }
      },
      firestore() {
        return app.firestore()
      },
    }
  },
}

Results in the following:

    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 31ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 9ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 39ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 36ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 66ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 59ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 100ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 91ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 144ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 141ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 175ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 189ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 218ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 198ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 231ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 234ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 232ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 231ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 245ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 240ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 255ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 260ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 300ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 309ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 310ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 317ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 343ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 331ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 356ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 339ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 342ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 370ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 391ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 410ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 380ms
    console.time specs/__mocks__/firebase-admin.js:16
      clearFirestoreData: 419ms
firestore

All 4 comments

cc @ryanpbrewster

@damonmaria thanks for posting this! Very interesting, feels like it's probably a bug in the emulator itself.

Nice report, replicated this locally and have a fix. Should go out with the next release.

Thanks for filing this issue! :)

This should be fixed as of the latest release, please re-open this issue if you run into it again :)

OMG, my test suite now runs in half the time.

Thanks!

Was this page helpful?
0 / 5 - 0 ratings