firebase-js-sdk icon indicating copy to clipboard operation
firebase-js-sdk copied to clipboard

@firebase/rules-unit-testing fails when loaded as es6 module with firebase-js-sdk >= 9.2.0

Open kenkunz opened this issue 4 years ago • 4 comments

[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:

  1. install dependency: Firebase Emulators

  2. 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
    
  3. run the tests

    npm run test
    

    Note that both test.js and test.cjs complete successfully

  4. upgrade to [email protected] (or greater)

    npm i -D [email protected]
    
  5. run the tests again

    npm run test
    

    Note that test.cjs still passes but test.js fails (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)

kenkunz avatar Dec 20 '21 17:12 kenkunz

I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.

google-oss-bot avatar Dec 20 '21 17:12 google-oss-bot

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.

jbalidiong avatar Dec 23 '21 15:12 jbalidiong

Thanks for the work around @kenkunz. I hit this bug when upgrading to the new 9.0 API

angrycat9000 avatar Dec 28 '21 13:12 angrycat9000

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

ChromeQ avatar Aug 29 '22 12:08 ChromeQ