firestore-jest-mock icon indicating copy to clipboard operation
firestore-jest-mock copied to clipboard

Can't mock firestore via firebase-admin

Open uttrasey opened this issue 4 years ago • 5 comments

Description

Struggling to get a test passing

Steps to reproduce

const { mockFirebase } = require("firestore-jest-mock");

mockFirebase({
  database: {
    users: [
      { id: "abc123", name: "Homer Simpson" },
      { id: "abc456", name: "Lisa Simpson" },
    ],
    posts: [{ id: "123abc", title: "Really cool title" }],
  },
});

const { mockCollection } = require("firestore-jest-mock/mocks/firestore");

test("testing stuff", () => {
  const admin = require("firebase-admin"); // or import firebase from 'firebase';
  admin.initializeApp();
  const db = admin.firestore();

  return db
    .collection("users")
    .get()
    .then((userDocs) => {
      console.log(userDocs);
      expect(mockCollection).toHaveBeenCalledWith("users");
      expect(userDocs.docs[0].data().name).toEqual("Homer Simpson");
    });
});

Expected result

Test pass

Actual result

Fails, firestore not mocked

Screenshot 2021-05-19 at 15 34 45

Environment

  • Node version:

uttrasey avatar May 19 '21 14:05 uttrasey

same here..watching

kevb10 avatar Sep 17 '21 23:09 kevb10

any updates here?

jayesh-remo avatar Oct 15 '21 07:10 jayesh-remo

Are you all calling mockFirebase outside of a describe block? i.e. is it at the top of the file before your tests are written? The hoisting in jest is weird and it requires that mockFirebase be in a describe block that wraps your tests. See the examples in our repo: https://github.com/Upstatement/firestore-jest-mock/blob/master/tests/auth.test.js#L16-L17

If you have an example repo you can point me to, I'm happy to play around

sbatson5 avatar Oct 29 '21 13:10 sbatson5

Hi, sorry for jumping onto that thread like that but you touched on a certain problem im having @sbatson5 with the comment. Can I have multiple "mockFirebase" instances per file im testing in, due to having multiple "describe" blocks? Very often i noticed that the "mockFirebase" conflict with each other even in between of the describes. Mind you, that im using es6 with node 16 which apparently stil doesnt have full support for some mocks and clears in jest annoyingly.

jdziek avatar Apr 22 '22 11:04 jdziek

Hi, sorry for jumping onto that thread like that but you touched on a certain problem im having @sbatson5 with the comment. Can I have multiple "mockFirebase" instances per file im testing in, due to having multiple "describe" blocks? Very often i noticed that the "mockFirebase" conflict with each other even in between of the describes. Mind you, that im using es6 with node 16 which apparently stil doesnt have full support for some mocks and clears in jest annoyingly.

@jdziek Hmm, yeah I would assume that would work but I've also had issues on the latest node and clearing mocks but haven't had time to dig into it. Honestly, jest's hoisting and inconsistent clearing has been one of the biggest headaches for writing such a large mock class, to the point where I just started writing more but smaller test files

sbatson5 avatar Apr 22 '22 14:04 sbatson5