'@firebase/database-compat/standalone' import error in jest tests
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.
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.
Hey @igorgarbuz , could you share a code sample to reproduce this? I am curious to see what your imports look like.
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
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 did u manage to solve this? this would be very helpful, thanks