Jasmine Unit testing define library that was imported as a global variable












1














I have a project that uses pdfMake to generate a PDF. To use it I include the file in my index.html



<script src='js/pdfmake.js'></script>
<script src='js/vfs_fonts.js'></script>


Inside pdfmake.js it declares global["pdfMake"] which then allows me to use the library in my service.



pdfService:



pdfMake.createPdf(docDefinition).download(fileName);


Everything works great but when I tried to test ths method in my service I get an error that the test can't find the variable pdfMake. That makes sense considering it's loaded by index.html.



How can I replace this library with a mock in my test?



I've tried using a spy but since makePdf isn't a function that doesn't work. spyOn(service, 'makePdf').



I tried just setting it as a variable but that also didn't work and I get: Strict mode forbids implicit creation of global property 'pdfMake'



pdfMake = {
createPdf: jasmine.createSpy('createPdf').and.returnValue({
download: jasmine.createSpy('download')
}
}









share|improve this question






















  • It should work. Have you had a look at stackoverflow.com/questions/13794637/… ?
    – tanmay
    Dec 19 '16 at 6:45










  • If anyone else is having an issue with this first to get rid of the implicit creation error make sure you declare your variable first so var pdfMake and when you create your spy attatch it to the window object
    – Jackthomson
    Aug 4 '17 at 9:23


















1














I have a project that uses pdfMake to generate a PDF. To use it I include the file in my index.html



<script src='js/pdfmake.js'></script>
<script src='js/vfs_fonts.js'></script>


Inside pdfmake.js it declares global["pdfMake"] which then allows me to use the library in my service.



pdfService:



pdfMake.createPdf(docDefinition).download(fileName);


Everything works great but when I tried to test ths method in my service I get an error that the test can't find the variable pdfMake. That makes sense considering it's loaded by index.html.



How can I replace this library with a mock in my test?



I've tried using a spy but since makePdf isn't a function that doesn't work. spyOn(service, 'makePdf').



I tried just setting it as a variable but that also didn't work and I get: Strict mode forbids implicit creation of global property 'pdfMake'



pdfMake = {
createPdf: jasmine.createSpy('createPdf').and.returnValue({
download: jasmine.createSpy('download')
}
}









share|improve this question






















  • It should work. Have you had a look at stackoverflow.com/questions/13794637/… ?
    – tanmay
    Dec 19 '16 at 6:45










  • If anyone else is having an issue with this first to get rid of the implicit creation error make sure you declare your variable first so var pdfMake and when you create your spy attatch it to the window object
    – Jackthomson
    Aug 4 '17 at 9:23
















1












1








1







I have a project that uses pdfMake to generate a PDF. To use it I include the file in my index.html



<script src='js/pdfmake.js'></script>
<script src='js/vfs_fonts.js'></script>


Inside pdfmake.js it declares global["pdfMake"] which then allows me to use the library in my service.



pdfService:



pdfMake.createPdf(docDefinition).download(fileName);


Everything works great but when I tried to test ths method in my service I get an error that the test can't find the variable pdfMake. That makes sense considering it's loaded by index.html.



How can I replace this library with a mock in my test?



I've tried using a spy but since makePdf isn't a function that doesn't work. spyOn(service, 'makePdf').



I tried just setting it as a variable but that also didn't work and I get: Strict mode forbids implicit creation of global property 'pdfMake'



pdfMake = {
createPdf: jasmine.createSpy('createPdf').and.returnValue({
download: jasmine.createSpy('download')
}
}









share|improve this question













I have a project that uses pdfMake to generate a PDF. To use it I include the file in my index.html



<script src='js/pdfmake.js'></script>
<script src='js/vfs_fonts.js'></script>


Inside pdfmake.js it declares global["pdfMake"] which then allows me to use the library in my service.



pdfService:



pdfMake.createPdf(docDefinition).download(fileName);


Everything works great but when I tried to test ths method in my service I get an error that the test can't find the variable pdfMake. That makes sense considering it's loaded by index.html.



How can I replace this library with a mock in my test?



I've tried using a spy but since makePdf isn't a function that doesn't work. spyOn(service, 'makePdf').



I tried just setting it as a variable but that also didn't work and I get: Strict mode forbids implicit creation of global property 'pdfMake'



pdfMake = {
createPdf: jasmine.createSpy('createPdf').and.returnValue({
download: jasmine.createSpy('download')
}
}






jasmine pdfmake






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Dec 16 '16 at 21:14









efarley

1,89132444




1,89132444












  • It should work. Have you had a look at stackoverflow.com/questions/13794637/… ?
    – tanmay
    Dec 19 '16 at 6:45










  • If anyone else is having an issue with this first to get rid of the implicit creation error make sure you declare your variable first so var pdfMake and when you create your spy attatch it to the window object
    – Jackthomson
    Aug 4 '17 at 9:23




















  • It should work. Have you had a look at stackoverflow.com/questions/13794637/… ?
    – tanmay
    Dec 19 '16 at 6:45










  • If anyone else is having an issue with this first to get rid of the implicit creation error make sure you declare your variable first so var pdfMake and when you create your spy attatch it to the window object
    – Jackthomson
    Aug 4 '17 at 9:23


















It should work. Have you had a look at stackoverflow.com/questions/13794637/… ?
– tanmay
Dec 19 '16 at 6:45




It should work. Have you had a look at stackoverflow.com/questions/13794637/… ?
– tanmay
Dec 19 '16 at 6:45












If anyone else is having an issue with this first to get rid of the implicit creation error make sure you declare your variable first so var pdfMake and when you create your spy attatch it to the window object
– Jackthomson
Aug 4 '17 at 9:23






If anyone else is having an issue with this first to get rid of the implicit creation error make sure you declare your variable first so var pdfMake and when you create your spy attatch it to the window object
– Jackthomson
Aug 4 '17 at 9:23














2 Answers
2






active

oldest

votes


















0














I got the same problem and solved inserting the pdfMake mock on global variable window inside the unit test. So, in your case will be something like this:



window.pdfMake = {
createPdf: jasmine.createSpy('createPdf')
.and.returnValue({
download: jasmine.createSpy('download')
}),
};





share|improve this answer





























    0














    I just fixed this issue by making below changes-



    Declare pdfMake variable globally in your .ts file like-



    declare var pdfMake;


    And then mock the pdfMake function in your .spec file like this-



    window['pdfMake'] = {
    createPdf: function (param) {
    return {
    open: function () {
    return true;
    },
    download: function () {
    return true;
    }
    };
    }


    };






    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%2f41192511%2fjasmine-unit-testing-define-library-that-was-imported-as-a-global-variable%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














      I got the same problem and solved inserting the pdfMake mock on global variable window inside the unit test. So, in your case will be something like this:



      window.pdfMake = {
      createPdf: jasmine.createSpy('createPdf')
      .and.returnValue({
      download: jasmine.createSpy('download')
      }),
      };





      share|improve this answer


























        0














        I got the same problem and solved inserting the pdfMake mock on global variable window inside the unit test. So, in your case will be something like this:



        window.pdfMake = {
        createPdf: jasmine.createSpy('createPdf')
        .and.returnValue({
        download: jasmine.createSpy('download')
        }),
        };





        share|improve this answer
























          0












          0








          0






          I got the same problem and solved inserting the pdfMake mock on global variable window inside the unit test. So, in your case will be something like this:



          window.pdfMake = {
          createPdf: jasmine.createSpy('createPdf')
          .and.returnValue({
          download: jasmine.createSpy('download')
          }),
          };





          share|improve this answer












          I got the same problem and solved inserting the pdfMake mock on global variable window inside the unit test. So, in your case will be something like this:



          window.pdfMake = {
          createPdf: jasmine.createSpy('createPdf')
          .and.returnValue({
          download: jasmine.createSpy('download')
          }),
          };






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 23 '17 at 15:43









          Victor Oliveira

          5114




          5114

























              0














              I just fixed this issue by making below changes-



              Declare pdfMake variable globally in your .ts file like-



              declare var pdfMake;


              And then mock the pdfMake function in your .spec file like this-



              window['pdfMake'] = {
              createPdf: function (param) {
              return {
              open: function () {
              return true;
              },
              download: function () {
              return true;
              }
              };
              }


              };






              share|improve this answer


























                0














                I just fixed this issue by making below changes-



                Declare pdfMake variable globally in your .ts file like-



                declare var pdfMake;


                And then mock the pdfMake function in your .spec file like this-



                window['pdfMake'] = {
                createPdf: function (param) {
                return {
                open: function () {
                return true;
                },
                download: function () {
                return true;
                }
                };
                }


                };






                share|improve this answer
























                  0












                  0








                  0






                  I just fixed this issue by making below changes-



                  Declare pdfMake variable globally in your .ts file like-



                  declare var pdfMake;


                  And then mock the pdfMake function in your .spec file like this-



                  window['pdfMake'] = {
                  createPdf: function (param) {
                  return {
                  open: function () {
                  return true;
                  },
                  download: function () {
                  return true;
                  }
                  };
                  }


                  };






                  share|improve this answer












                  I just fixed this issue by making below changes-



                  Declare pdfMake variable globally in your .ts file like-



                  declare var pdfMake;


                  And then mock the pdfMake function in your .spec file like this-



                  window['pdfMake'] = {
                  createPdf: function (param) {
                  return {
                  open: function () {
                  return true;
                  },
                  download: function () {
                  return true;
                  }
                  };
                  }


                  };







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 19 '18 at 13:10









                  Sheshaj Awasthi

                  243




                  243






























                      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.





                      Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                      Please pay close attention to the following guidance:


                      • 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%2f41192511%2fjasmine-unit-testing-define-library-that-was-imported-as-a-global-variable%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

                      MongoDB - Not Authorized To Execute Command

                      in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith

                      How to fix TextFormField cause rebuild widget in Flutter