firebase-admin-node icon indicating copy to clipboard operation
firebase-admin-node copied to clipboard

'@firebase/database-compat/standalone' import error in jest tests

Open igorgarbuz opened this issue 2 years ago • 5 comments

Environment

  • Operating System version: MacOS 12.6.3
  • Firebase SDK version: 11.3.0
  • Firebase Product: firebase-admin
  • Node.js version: 16.19.0
  • NPM version: 8.19.3
  • jest: 29.4.3
  • typescript: 4.9.3

Describe the problem After updating: firebase-functions v3 -> v4 firebase-admin v11.3 -> v11.5 firebase-functions-test v0.3.0 -> v3.0.0

Any jest test using any firebase library will fail with the following error:

  ● Test suite failed to run

    Cannot find module '@firebase/database-compat/standalone' from '../../node_modules/firebase-admin/lib/database/index.js'

    Require stack:
      /Users/igor/Dev/vogel_database/node_modules/firebase-admin/lib/database/index.js
      /Users/igor/Dev/vogel_database/node_modules/firebase-functions/lib/common/providers/database.js
      /Users/igor/Dev/vogel_database/node_modules/firebase-functions/lib/v1/providers/database.js
      /Users/igor/Dev/vogel_database/node_modules/firebase-functions/lib/v1/index.js
      /Users/igor/Dev/vogel_database/node_modules/firebase-functions-test/lib/v1.js
      /Users/igor/Dev/vogel_database/node_modules/firebase-functions-test/lib/main.js
      /Users/igor/Dev/vogel_database/node_modules/firebase-functions-test/lib/features.js
      /Users/igor/Dev/vogel_database/node_modules/firebase-functions-test/lib/index.js
     path/to/the/test/file.test.ts

Call stack in the example above may differ depending on the firebase library used, but will alway end at Users/igor/Dev/vogel_database/node_modules/firebase-admin/lib/database/index.js with the same error for importing '@firebase/database-compat/standalone'.

Steps to reproduce:

Install libraries with the provided versions. Run jest <any.file.test.ts> where test file uses at least one firebase library that has an internal reference to firebase-admin.

igorgarbuz avatar Mar 01 '23 16:03 igorgarbuz

I found a few problems with this issue:

  • I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.
  • This issue does not seem to follow the issue template. Make sure you provide all the required information.

google-oss-bot avatar Mar 01 '23 16:03 google-oss-bot

Hey @igorgarbuz , could you share a code sample to reproduce this? I am curious to see what your imports look like.

lahirumaramba avatar Mar 01 '23 20:03 lahirumaramba

It's sufficient to have only one import referring to firebase-admin. For example import FFTest from 'firebase-functions-test'; is the only line in a file <filename>.test.ts. When the file is run npx jest <filename>.test.ts there is an error :

    Cannot find module '@firebase/database-compat/standalone' from '../../node_modules/firebase-admin/lib/database/index.js'

    Require stack:
      <path>/node_modules/firebase-admin/lib/database/index.js
      <path>/node_modules/firebase-functions/lib/common/providers/database.js
      <path>/node_modules/firebase-functions/lib/v1/providers/database.js
      <path>/node_modules/firebase-functions/lib/v1/index.js
      src/config.ts
      src/mocks/handlers.ts
      src/mocks/server.ts
      jest.setup.ts

igorgarbuz avatar Mar 02 '23 15:03 igorgarbuz

Actually my previous example was not accurate. Even if there is an empty test file, there is still en error because there is an import import * as functions from 'firebase-functions'; in src/config.ts used by jest.setup.ts and run before the test. If there is not import of firebase-functions in src/config.ts, there is still an error from firebase-functions-test:

 FAIL  <filename>.test.ts
  ● Test suite failed to run

    Cannot find module '@firebase/database-compat/standalone' from '../../node_modules/firebase-admin/lib/database/index.js'

    Require stack:
      <path>/node_modules/firebase-admin/lib/database/index.js
      <path>/node_modules/firebase-functions/lib/common/providers/database.js
     <path>/node_modules/firebase-functions/lib/v1/providers/database.js
      <path>/node_modules/firebase-functions/lib/v1/index.js
      <path>/node_modules/firebase-functions-test/lib/v1.js
      <path>/node_modules/firebase-functions-test/lib/main.js
      <path>/node_modules/firebase-functions-test/lib/features.js
      <path>node_modules/firebase-functions-test/lib/index.js
      <filename>.test.ts

imports in <filename>test.ts look like

import path from 'path';
import { DocumentReference, DocumentSnapshot } from '@firebase/firestore-types';
import FFTest from 'firebase-functions-test';
import 'html-validate/jest';
import { v4 as uuidv4 } from 'uuid';

igorgarbuz avatar Mar 02 '23 15:03 igorgarbuz

@igorgarbuz did u manage to solve this? this would be very helpful, thanks

andresfelipe9619 avatar Oct 13 '24 12:10 andresfelipe9619