sbatson5 / firestore-jest-mock

Jest Helper library for mocking Cloud Firestore
https://www.npmjs.com/package/firestore-jest-mock
177 stars 58 forks source link

Can't mock firestore via firebase-admin #105

Open uttrasey opened 3 years ago

uttrasey commented 3 years ago

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

kevb10 commented 3 years ago

same here..watching

jayesh-remo commented 3 years ago

any updates here?

sbatson5 commented 3 years ago

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

jdziek commented 2 years ago

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.

sbatson5 commented 2 years ago

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