title: How do you mock Firebase Firestore methods using Jest?
body: <p>I have a series of functions, each performing various firestore interactions. How do I use Jest to mock these firestore calls? I would like to avoid using a library.</p>
  
  <p>When I use <code>jest.mock("firebase/app")</code> and <code>jest.mock("firebase/firestore")</code> and other variations, I either get null TypeErrors, or errors indicating I am still referencing the actual import and not the mock: <code>Error: ... make sure you call initializeApp()</code>.</p>
  
  <p>For example, a simple function I want to test:</p>
  
  <pre><code>import firebase from "firebase/app";
  import "firebase/firestore";
  
  export const setDocData = (id, data) =&gt; {
    const newDoc = {
      created: firebase.firestore.FieldValue.serverTimestamp(),
      ...data
    };
    firebase
      .firestore()
      .doc("docs/" + id)
      .set(newDoc);
  };
  </code></pre>
  
  <p>Notice how firebase is imported as usual, then firestore is imported a side effect. Also notice how firestore is called first as a function, then later referenced as a property. I believe this is the source of my trouble.</p>