@firebase/rules-unit-testing fails when loaded as es6 module with firebase-js-sdk >= 9.2.0
[REQUIRED] Describe your environment
- Operating System version: macOS Monterey 12.0.1
- Browser version: n/a
- Firebase SDK version: >= 9.2.0
- Firebase Product: rules-unit-testing, firestore
[REQUIRED] Describe the problem
With @firebase/[email protected] and firebase >=9.0.0 <=9.1.3, the test utilities work
whether loaded as a cjs require or an es6 module. After upgrading to firebase >=9.2.0, the
utilities no longer work when loaded as es6 module, but still work when loaded with cjs require.
Since other firebase modules support es6 module loading, it seems surprising for rules-unit-testing not to fully support this as well.
Current workaround
Using cjs require for my firestore rules tests.
Steps to reproduce:
-
install dependency: Firebase Emulators
-
clone kenkunz/firestore-testing-repro and install npm modules
git clone https://github.com/kenkunz/firestore-testing-repro.git cd firestore-testing-repro npm install -
run the tests
npm run testNote that both
test.jsandtest.cjscomplete successfully -
upgrade to
[email protected](or greater)npm i -D [email protected] -
run the tests again
npm run testNote that
test.cjsstill passes buttest.jsfails (see error output below)
Error output:
FirebaseError: Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore
at doc (file:///Users/ken/Code/firestore-testing-repro/node_modules/@firebase/firestore/dist/index.node.mjs:19998:19)
at file:///Users/ken/Code/firestore-testing-repro/test.js:8:20
at RulesTestEnvironmentImpl.<anonymous> (node_modules/@firebase/rules-unit-testing/dist/index.cjs.js:310:46)
at step (node_modules/@firebase/rules-unit-testing/dist/index.cjs.js:74:23)
at Object.next (node_modules/@firebase/rules-unit-testing/dist/index.cjs.js:55:53)
at /Users/ken/Code/firestore-testing-repro/node_modules/@firebase/rules-unit-testing/dist/index.cjs.js:48:71
at new Promise (<anonymous>)
at __awaiter (node_modules/@firebase/rules-unit-testing/dist/index.cjs.js:44:12)
at RulesTestEnvironmentImpl.withSecurityRulesDisabled (node_modules/@firebase/rules-unit-testing/dist/index.cjs.js:300:16)
at Context.<anonymous> (file:///Users/ken/Code/firestore-testing-repro/test.js:7:19)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.
Hi @kenkunz, thanks for the report. I was able to reproduce the behavior now. Let me check what we can do for this issue or bring someone here that can provide more context about it. I’ll update this thread if I have any information to share.
Thanks for the work around @kenkunz. I hit this bug when upgrading to the new 9.0 API
Noticed this is old but it is still an issue with firebase v9.9.3 and @firebase/rules-unit-testing v2.0.4 so it would be good to see an update or a fix here