Test Firebase RealtimeDatabase using Jest











up vote
2
down vote

favorite
1












My purpose is simply to test one function. I cannot figure out how to mock firebase properly. I try to keep the example with axios mocking from Jest docs. I have the following code:



MusicService.js



import { initializeApp } from "firebase/app";
import "firebase/database";

const firebase = initializeApp({
apiKey: "<API_KEY>",
authDomain: "<PROJECT_ID>.firebaseapp.com",
databaseURL: "https://<DATABASE_NAME>.firebaseio.com",
projectId: "<PROJECT_ID>",
storageBucket: "<BUCKET>.appspot.com",
messagingSenderId: "<SENDER_ID>",
});

export class MusicService {
static getAlbums() {
return firebase.database().ref("albums").once("value")
.then(snapshot => Object.values(snapshot.val()));
}
}


MusicService.test.js



import firebase from 'firebase/app';
import 'firebase/database';
import { MusicService } from './MusicService';

jest.mock('firebase/app');
jest.mock('firebase/database');

test("test", () => {
firebase.initializeApp.mockImplementation(() => {
database: jest.fn(() => {
return {
ref: jest.fn()
}
})
});

MusicService.getAlbums();
});


The problem is that I get the following error:
enter image description here



I tried to mock firebase.database.



test("test", () => {
firebase.mockImplementation(() => {
return {
database: {

}
}
});
MusicService.getAlbums();
});


But in this case I get the error that says:




TypeError: _app.default.mockImplementation is not a function.




I don't expect the working example will be given, but rather could you tell please, what exactly should I mock? The whole firebase library or maybe the part where my function starts - return firebase.database().










share|improve this question




























    up vote
    2
    down vote

    favorite
    1












    My purpose is simply to test one function. I cannot figure out how to mock firebase properly. I try to keep the example with axios mocking from Jest docs. I have the following code:



    MusicService.js



    import { initializeApp } from "firebase/app";
    import "firebase/database";

    const firebase = initializeApp({
    apiKey: "<API_KEY>",
    authDomain: "<PROJECT_ID>.firebaseapp.com",
    databaseURL: "https://<DATABASE_NAME>.firebaseio.com",
    projectId: "<PROJECT_ID>",
    storageBucket: "<BUCKET>.appspot.com",
    messagingSenderId: "<SENDER_ID>",
    });

    export class MusicService {
    static getAlbums() {
    return firebase.database().ref("albums").once("value")
    .then(snapshot => Object.values(snapshot.val()));
    }
    }


    MusicService.test.js



    import firebase from 'firebase/app';
    import 'firebase/database';
    import { MusicService } from './MusicService';

    jest.mock('firebase/app');
    jest.mock('firebase/database');

    test("test", () => {
    firebase.initializeApp.mockImplementation(() => {
    database: jest.fn(() => {
    return {
    ref: jest.fn()
    }
    })
    });

    MusicService.getAlbums();
    });


    The problem is that I get the following error:
    enter image description here



    I tried to mock firebase.database.



    test("test", () => {
    firebase.mockImplementation(() => {
    return {
    database: {

    }
    }
    });
    MusicService.getAlbums();
    });


    But in this case I get the error that says:




    TypeError: _app.default.mockImplementation is not a function.




    I don't expect the working example will be given, but rather could you tell please, what exactly should I mock? The whole firebase library or maybe the part where my function starts - return firebase.database().










    share|improve this question


























      up vote
      2
      down vote

      favorite
      1









      up vote
      2
      down vote

      favorite
      1






      1





      My purpose is simply to test one function. I cannot figure out how to mock firebase properly. I try to keep the example with axios mocking from Jest docs. I have the following code:



      MusicService.js



      import { initializeApp } from "firebase/app";
      import "firebase/database";

      const firebase = initializeApp({
      apiKey: "<API_KEY>",
      authDomain: "<PROJECT_ID>.firebaseapp.com",
      databaseURL: "https://<DATABASE_NAME>.firebaseio.com",
      projectId: "<PROJECT_ID>",
      storageBucket: "<BUCKET>.appspot.com",
      messagingSenderId: "<SENDER_ID>",
      });

      export class MusicService {
      static getAlbums() {
      return firebase.database().ref("albums").once("value")
      .then(snapshot => Object.values(snapshot.val()));
      }
      }


      MusicService.test.js



      import firebase from 'firebase/app';
      import 'firebase/database';
      import { MusicService } from './MusicService';

      jest.mock('firebase/app');
      jest.mock('firebase/database');

      test("test", () => {
      firebase.initializeApp.mockImplementation(() => {
      database: jest.fn(() => {
      return {
      ref: jest.fn()
      }
      })
      });

      MusicService.getAlbums();
      });


      The problem is that I get the following error:
      enter image description here



      I tried to mock firebase.database.



      test("test", () => {
      firebase.mockImplementation(() => {
      return {
      database: {

      }
      }
      });
      MusicService.getAlbums();
      });


      But in this case I get the error that says:




      TypeError: _app.default.mockImplementation is not a function.




      I don't expect the working example will be given, but rather could you tell please, what exactly should I mock? The whole firebase library or maybe the part where my function starts - return firebase.database().










      share|improve this question















      My purpose is simply to test one function. I cannot figure out how to mock firebase properly. I try to keep the example with axios mocking from Jest docs. I have the following code:



      MusicService.js



      import { initializeApp } from "firebase/app";
      import "firebase/database";

      const firebase = initializeApp({
      apiKey: "<API_KEY>",
      authDomain: "<PROJECT_ID>.firebaseapp.com",
      databaseURL: "https://<DATABASE_NAME>.firebaseio.com",
      projectId: "<PROJECT_ID>",
      storageBucket: "<BUCKET>.appspot.com",
      messagingSenderId: "<SENDER_ID>",
      });

      export class MusicService {
      static getAlbums() {
      return firebase.database().ref("albums").once("value")
      .then(snapshot => Object.values(snapshot.val()));
      }
      }


      MusicService.test.js



      import firebase from 'firebase/app';
      import 'firebase/database';
      import { MusicService } from './MusicService';

      jest.mock('firebase/app');
      jest.mock('firebase/database');

      test("test", () => {
      firebase.initializeApp.mockImplementation(() => {
      database: jest.fn(() => {
      return {
      ref: jest.fn()
      }
      })
      });

      MusicService.getAlbums();
      });


      The problem is that I get the following error:
      enter image description here



      I tried to mock firebase.database.



      test("test", () => {
      firebase.mockImplementation(() => {
      return {
      database: {

      }
      }
      });
      MusicService.getAlbums();
      });


      But in this case I get the error that says:




      TypeError: _app.default.mockImplementation is not a function.




      I don't expect the working example will be given, but rather could you tell please, what exactly should I mock? The whole firebase library or maybe the part where my function starts - return firebase.database().







      javascript firebase unit-testing firebase-realtime-database jestjs






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 10 at 23:15









      LazerBass

      1,2183921




      1,2183921










      asked Nov 10 at 12:39









      Lucknee

      226




      226





























          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














           

          draft saved


          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53239045%2ftest-firebase-realtimedatabase-using-jest%23new-answer', 'question_page');
          }
          );

          Post as a guest





































          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















           

          draft saved


          draft discarded



















































           


          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53239045%2ftest-firebase-realtimedatabase-using-jest%23new-answer', 'question_page');
          }
          );

          Post as a guest




















































































          Popular posts from this blog

          Florida Star v. B. J. F.

          Danny Elfman

          Lugert, Oklahoma