Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeError: firebase__default.default.initializeApp is not a function when using initializeTestApp method

Environment

node: 14.15.5
OS: macOS Big Sur v11.2

What is the problem

When I try to run test with Jest, test fails with an error message that "TypeError: firebase__default.default.initializeApp is not a function" even if I use initializeTestApp, not initializeApp

What I have tried

  • I used @firebase/rules-unit-testing ver2.0.0 but there was no initializeTestApp function so I downgraded the version to 1.3.14 as described below.
  • I deleted yarn.lock file and use command yarn install but it did not work.
  • I searched issues but there is no exact the same issue.(this is similar issue: https://github.com/firebase/firebase-js-sdk/issues/4944)

I would really appreciate if you can give me any advices. Thank you.

firebaseRules.test.ts

import * as firebase from "@firebase/rules-unit-testing";
import fs from "fs";
import path from "path";

const myId = "user_Id";

// Load security rules
const filePath = path.join(__dirname, "./firestore.rules");
const rules = fs.readFileSync(filePath, "utf8");
const myProjectId = "my-project-2021";

describe("Allow access to users collection only when user is authorized", () => {
  beforeEach(
    async () => await firebase.clearFirestoreData({ projectId: myProjectId })
  );
  beforeEach(
    async () =>
      await firebase.loadFirestoreRules({
        projectId: myProjectId,
        rules: rules,
      })
  );

  afterAll(
    async () => await firebase.clearFirestoreData({ projectId: myProjectId })
  );

describe("allow access to project collection only when user is authorized", () => {
  test("fail to access without auth", async () => {
      const db = firebase
        // here test fails: TypeError: firebase__default.default.initializeApp is not a function
        .initializeTestApp({
          projectId: myProjectId,
        })
        .firestore();
      const doc = db
        .collection("users")
        .doc("user_shogo")
        .collection("projects")
        .doc("testProjectId");
      await firebase.assertFails(doc.get());
    });
  });
});

package.json

{
  "name": "move-gantt",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint",
    "test": "jest --silent=false --verbose false"
  },
  "dependencies": {
    "@firebase/rules-unit-testing": "1.3.14",
    "@material-ui/core": "^4.12.3",
    "@material-ui/icons": "^5.0.0-beta.4",
    "@material-ui/lab": "^4.0.0-alpha.60",
    "@material-ui/styles": "^4.11.4",
    "@types/react-redux": "^7.1.18",
    "date-fns": "^2.23.0",
    "firebase": "8.10.0",
    "firebase-tools": "^9.16.6",
    "next": "11.0.1",
    "next-transpile-modules": "^8.0.0",
    "react": "17.0.2",
    "react-dom": "17.0.2",
    "react-redux": "^7.2.4",
    "redux": "^4.1.1",
    "redux-devtools-extension": "^2.13.9",
    "redux-logger": "^3.0.6",
    "styled-components": "^5.3.0",
    "styled-jsx": "3.4.5"
  },
  "devDependencies": {
    "@babel/cli": "^7.14.8",
    "@babel/core": "^7.15.0",
    "@testing-library/react": "^12.0.0",
    "@types/jest": "^27.0.0",
    "@types/node": "^16.4.11",
    "@types/react": "^17.0.15",
    "@types/react-dom": "^17.0.9",
    "@types/react-test-renderer": "^17.0.1",
    "@types/redux-logger": "^3.0.9",
    "@types/styled-components": "^5.1.11",
    "babel-plugin-styled-components": "^1.13.2",
    "eslint": "7.32.0",
    "eslint-config-next": "11.0.1",
    "firebase-admin": "9.8.0",
    "jest": "^27.0.6",
    "react-test-renderer": "^17.0.2",
    "ts-jest": "^27.0.4",
    "typescript": "^4.3.5"
  }
}
like image 818
shogo_nakano Avatar asked May 04 '26 19:05

shogo_nakano


1 Answers

I don't know why but the new versions of the package don't work well and the method is no longer in, I downgraded the package to version "^1.3.7".

Change in your package.json:

"@firebase/rules-unit-testing": "^1.3.7"

And after:

npm install
like image 123
hugo duchene Avatar answered May 07 '26 11:05

hugo duchene



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!