Mock underscore in jasmine/angular test











up vote
1
down vote

favorite












In a component, I have the following method:



import _ from 'underscore';


@Component({
selector: 'hello-selector',
templateUrl: './hello.component.html'
)}
export class Hello implements OnInit{

...
public arrayHello(): Array {
return _.chain(...)
...
}
...

ngOnInit(): void {
myarray = this.arrayHello();
}


The default test case in the angular spec file failed with the error




TypeError: Cannot read property 'chain' of undefined




How to Mock underscore in order to deal with this error?



I already tried the following but it does not seems to be the right way: spyOn(_, 'chain').and.callFake((f => f()));










share|improve this question




























    up vote
    1
    down vote

    favorite












    In a component, I have the following method:



    import _ from 'underscore';


    @Component({
    selector: 'hello-selector',
    templateUrl: './hello.component.html'
    )}
    export class Hello implements OnInit{

    ...
    public arrayHello(): Array {
    return _.chain(...)
    ...
    }
    ...

    ngOnInit(): void {
    myarray = this.arrayHello();
    }


    The default test case in the angular spec file failed with the error




    TypeError: Cannot read property 'chain' of undefined




    How to Mock underscore in order to deal with this error?



    I already tried the following but it does not seems to be the right way: spyOn(_, 'chain').and.callFake((f => f()));










    share|improve this question


























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      In a component, I have the following method:



      import _ from 'underscore';


      @Component({
      selector: 'hello-selector',
      templateUrl: './hello.component.html'
      )}
      export class Hello implements OnInit{

      ...
      public arrayHello(): Array {
      return _.chain(...)
      ...
      }
      ...

      ngOnInit(): void {
      myarray = this.arrayHello();
      }


      The default test case in the angular spec file failed with the error




      TypeError: Cannot read property 'chain' of undefined




      How to Mock underscore in order to deal with this error?



      I already tried the following but it does not seems to be the right way: spyOn(_, 'chain').and.callFake((f => f()));










      share|improve this question















      In a component, I have the following method:



      import _ from 'underscore';


      @Component({
      selector: 'hello-selector',
      templateUrl: './hello.component.html'
      )}
      export class Hello implements OnInit{

      ...
      public arrayHello(): Array {
      return _.chain(...)
      ...
      }
      ...

      ngOnInit(): void {
      myarray = this.arrayHello();
      }


      The default test case in the angular spec file failed with the error




      TypeError: Cannot read property 'chain' of undefined




      How to Mock underscore in order to deal with this error?



      I already tried the following but it does not seems to be the right way: spyOn(_, 'chain').and.callFake((f => f()));







      angular mocking underscore.js karma-jasmine






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited yesterday









      Philipp Meissner

      1,82411531




      1,82411531










      asked yesterday









      billyjov

      594314




      594314
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote













          You can create mock Object for underscore.



          import _ from './test-data/UnderscoreMock';


          And use UnderscoreMock:



          ./test-data/UnderscoreMock



          export default const _ {
          chain: () => {}
          ....
          }


          and set UnderscoreMock in component.



          Second you can use spyOn into component.



          spyOn(INSTANCE_COMPONENT, "chain"); 





          share|improve this answer





















          • always get an undefined
            – billyjov
            yesterday










          • can trying const spyChain = (window._, 'chain').and.callFake(() => {})
            – Konstantin Okhotnick
            yesterday










          • and expect(spyChain.chain).toHaveBeenCalled();
            – Konstantin Okhotnick
            yesterday










          • not working yet for the case
            – billyjov
            yesterday










          • Yes, I think you need to wrap up chain in method or check value how you get with chain
            – Konstantin Okhotnick
            yesterday











          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%2f53372039%2fmock-underscore-in-jasmine-angular-test%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          up vote
          0
          down vote













          You can create mock Object for underscore.



          import _ from './test-data/UnderscoreMock';


          And use UnderscoreMock:



          ./test-data/UnderscoreMock



          export default const _ {
          chain: () => {}
          ....
          }


          and set UnderscoreMock in component.



          Second you can use spyOn into component.



          spyOn(INSTANCE_COMPONENT, "chain"); 





          share|improve this answer





















          • always get an undefined
            – billyjov
            yesterday










          • can trying const spyChain = (window._, 'chain').and.callFake(() => {})
            – Konstantin Okhotnick
            yesterday










          • and expect(spyChain.chain).toHaveBeenCalled();
            – Konstantin Okhotnick
            yesterday










          • not working yet for the case
            – billyjov
            yesterday










          • Yes, I think you need to wrap up chain in method or check value how you get with chain
            – Konstantin Okhotnick
            yesterday















          up vote
          0
          down vote













          You can create mock Object for underscore.



          import _ from './test-data/UnderscoreMock';


          And use UnderscoreMock:



          ./test-data/UnderscoreMock



          export default const _ {
          chain: () => {}
          ....
          }


          and set UnderscoreMock in component.



          Second you can use spyOn into component.



          spyOn(INSTANCE_COMPONENT, "chain"); 





          share|improve this answer





















          • always get an undefined
            – billyjov
            yesterday










          • can trying const spyChain = (window._, 'chain').and.callFake(() => {})
            – Konstantin Okhotnick
            yesterday










          • and expect(spyChain.chain).toHaveBeenCalled();
            – Konstantin Okhotnick
            yesterday










          • not working yet for the case
            – billyjov
            yesterday










          • Yes, I think you need to wrap up chain in method or check value how you get with chain
            – Konstantin Okhotnick
            yesterday













          up vote
          0
          down vote










          up vote
          0
          down vote









          You can create mock Object for underscore.



          import _ from './test-data/UnderscoreMock';


          And use UnderscoreMock:



          ./test-data/UnderscoreMock



          export default const _ {
          chain: () => {}
          ....
          }


          and set UnderscoreMock in component.



          Second you can use spyOn into component.



          spyOn(INSTANCE_COMPONENT, "chain"); 





          share|improve this answer












          You can create mock Object for underscore.



          import _ from './test-data/UnderscoreMock';


          And use UnderscoreMock:



          ./test-data/UnderscoreMock



          export default const _ {
          chain: () => {}
          ....
          }


          and set UnderscoreMock in component.



          Second you can use spyOn into component.



          spyOn(INSTANCE_COMPONENT, "chain"); 






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered yesterday









          Konstantin Okhotnick

          946718




          946718












          • always get an undefined
            – billyjov
            yesterday










          • can trying const spyChain = (window._, 'chain').and.callFake(() => {})
            – Konstantin Okhotnick
            yesterday










          • and expect(spyChain.chain).toHaveBeenCalled();
            – Konstantin Okhotnick
            yesterday










          • not working yet for the case
            – billyjov
            yesterday










          • Yes, I think you need to wrap up chain in method or check value how you get with chain
            – Konstantin Okhotnick
            yesterday


















          • always get an undefined
            – billyjov
            yesterday










          • can trying const spyChain = (window._, 'chain').and.callFake(() => {})
            – Konstantin Okhotnick
            yesterday










          • and expect(spyChain.chain).toHaveBeenCalled();
            – Konstantin Okhotnick
            yesterday










          • not working yet for the case
            – billyjov
            yesterday










          • Yes, I think you need to wrap up chain in method or check value how you get with chain
            – Konstantin Okhotnick
            yesterday
















          always get an undefined
          – billyjov
          yesterday




          always get an undefined
          – billyjov
          yesterday












          can trying const spyChain = (window._, 'chain').and.callFake(() => {})
          – Konstantin Okhotnick
          yesterday




          can trying const spyChain = (window._, 'chain').and.callFake(() => {})
          – Konstantin Okhotnick
          yesterday












          and expect(spyChain.chain).toHaveBeenCalled();
          – Konstantin Okhotnick
          yesterday




          and expect(spyChain.chain).toHaveBeenCalled();
          – Konstantin Okhotnick
          yesterday












          not working yet for the case
          – billyjov
          yesterday




          not working yet for the case
          – billyjov
          yesterday












          Yes, I think you need to wrap up chain in method or check value how you get with chain
          – Konstantin Okhotnick
          yesterday




          Yes, I think you need to wrap up chain in method or check value how you get with chain
          – Konstantin Okhotnick
          yesterday


















           

          draft saved


          draft discarded



















































           


          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53372039%2fmock-underscore-in-jasmine-angular-test%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

          Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

          ts Property 'filter' does not exist on type '{}'

          mat-slide-toggle shouldn't change it's state when I click cancel in confirmation window