How to Mock non-default import using Jest












1















How can I mock a function that is being imported inside the file that contains the function I am testing?



without putting it in the mocks folder.



// FileIWantToTest.js
import { externalFunction } from '../../differentFolder';

export const methodIwantToTest = (x) => { externalFunction(x + 1) }


I need to make sure that externalFunction is called and its called with the correct arguments.



Seems super simple but the documentation doesn't cover how to do this without mocking the module for all the files in the test by putting the mocks in the mocks folder.










share|improve this question





























    1















    How can I mock a function that is being imported inside the file that contains the function I am testing?



    without putting it in the mocks folder.



    // FileIWantToTest.js
    import { externalFunction } from '../../differentFolder';

    export const methodIwantToTest = (x) => { externalFunction(x + 1) }


    I need to make sure that externalFunction is called and its called with the correct arguments.



    Seems super simple but the documentation doesn't cover how to do this without mocking the module for all the files in the test by putting the mocks in the mocks folder.










    share|improve this question



























      1












      1








      1


      1






      How can I mock a function that is being imported inside the file that contains the function I am testing?



      without putting it in the mocks folder.



      // FileIWantToTest.js
      import { externalFunction } from '../../differentFolder';

      export const methodIwantToTest = (x) => { externalFunction(x + 1) }


      I need to make sure that externalFunction is called and its called with the correct arguments.



      Seems super simple but the documentation doesn't cover how to do this without mocking the module for all the files in the test by putting the mocks in the mocks folder.










      share|improve this question
















      How can I mock a function that is being imported inside the file that contains the function I am testing?



      without putting it in the mocks folder.



      // FileIWantToTest.js
      import { externalFunction } from '../../differentFolder';

      export const methodIwantToTest = (x) => { externalFunction(x + 1) }


      I need to make sure that externalFunction is called and its called with the correct arguments.



      Seems super simple but the documentation doesn't cover how to do this without mocking the module for all the files in the test by putting the mocks in the mocks folder.







      javascript unit-testing testing jestjs






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 13 '18 at 20:32









      skyboyer

      3,48611128




      3,48611128










      asked Nov 13 '18 at 19:17









      OsurielOsuriel

      233




      233
























          2 Answers
          2






          active

          oldest

          votes


















          0














          The solution: I need to take my jest.mock call outside of any test or any other function because jest needs to hoist it. Also for named exports like in my case I also have to use the following syntax:



          jest.mock('../../differentFolder', () => ({
          __esModule: true,
          externalFunction: jest.fn(),
          }));





          share|improve this answer































            0














            One of the easiest approaches is to import the library and use jest.spyOn to spy on the method:



            import { methodIwantToTest } from './FileIWantToTest';
            import * as lib from '../../differentFolder'; // import the library containing externalFunction

            test('methodIwantToTest', () => {
            const spy = jest.spyOn(lib, 'externalFunction'); // spy on externalFunction
            methodIwantToTest(1);
            expect(spy).toHaveBeenCalledWith(2); // SUCCESS
            });





            share|improve this answer























              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',
              autoActivateHeartbeat: false,
              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%2f53288067%2fhow-to-mock-non-default-import-using-jest%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              0














              The solution: I need to take my jest.mock call outside of any test or any other function because jest needs to hoist it. Also for named exports like in my case I also have to use the following syntax:



              jest.mock('../../differentFolder', () => ({
              __esModule: true,
              externalFunction: jest.fn(),
              }));





              share|improve this answer




























                0














                The solution: I need to take my jest.mock call outside of any test or any other function because jest needs to hoist it. Also for named exports like in my case I also have to use the following syntax:



                jest.mock('../../differentFolder', () => ({
                __esModule: true,
                externalFunction: jest.fn(),
                }));





                share|improve this answer


























                  0












                  0








                  0







                  The solution: I need to take my jest.mock call outside of any test or any other function because jest needs to hoist it. Also for named exports like in my case I also have to use the following syntax:



                  jest.mock('../../differentFolder', () => ({
                  __esModule: true,
                  externalFunction: jest.fn(),
                  }));





                  share|improve this answer













                  The solution: I need to take my jest.mock call outside of any test or any other function because jest needs to hoist it. Also for named exports like in my case I also have to use the following syntax:



                  jest.mock('../../differentFolder', () => ({
                  __esModule: true,
                  externalFunction: jest.fn(),
                  }));






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 13 '18 at 21:13









                  OsurielOsuriel

                  233




                  233

























                      0














                      One of the easiest approaches is to import the library and use jest.spyOn to spy on the method:



                      import { methodIwantToTest } from './FileIWantToTest';
                      import * as lib from '../../differentFolder'; // import the library containing externalFunction

                      test('methodIwantToTest', () => {
                      const spy = jest.spyOn(lib, 'externalFunction'); // spy on externalFunction
                      methodIwantToTest(1);
                      expect(spy).toHaveBeenCalledWith(2); // SUCCESS
                      });





                      share|improve this answer




























                        0














                        One of the easiest approaches is to import the library and use jest.spyOn to spy on the method:



                        import { methodIwantToTest } from './FileIWantToTest';
                        import * as lib from '../../differentFolder'; // import the library containing externalFunction

                        test('methodIwantToTest', () => {
                        const spy = jest.spyOn(lib, 'externalFunction'); // spy on externalFunction
                        methodIwantToTest(1);
                        expect(spy).toHaveBeenCalledWith(2); // SUCCESS
                        });





                        share|improve this answer


























                          0












                          0








                          0







                          One of the easiest approaches is to import the library and use jest.spyOn to spy on the method:



                          import { methodIwantToTest } from './FileIWantToTest';
                          import * as lib from '../../differentFolder'; // import the library containing externalFunction

                          test('methodIwantToTest', () => {
                          const spy = jest.spyOn(lib, 'externalFunction'); // spy on externalFunction
                          methodIwantToTest(1);
                          expect(spy).toHaveBeenCalledWith(2); // SUCCESS
                          });





                          share|improve this answer













                          One of the easiest approaches is to import the library and use jest.spyOn to spy on the method:



                          import { methodIwantToTest } from './FileIWantToTest';
                          import * as lib from '../../differentFolder'; // import the library containing externalFunction

                          test('methodIwantToTest', () => {
                          const spy = jest.spyOn(lib, 'externalFunction'); // spy on externalFunction
                          methodIwantToTest(1);
                          expect(spy).toHaveBeenCalledWith(2); // SUCCESS
                          });






                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 14 '18 at 2:43









                          brian-lives-outdoorsbrian-lives-outdoors

                          5,245322




                          5,245322






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53288067%2fhow-to-mock-non-default-import-using-jest%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Xamarin.iOS Cant Deploy on Iphone

                              Glorious Revolution

                              Dulmage-Mendelsohn matrix decomposition in Python