Jasmine - how to spyOn instance methods

前端 未结 2 530
耶瑟儿~
耶瑟儿~ 2020-12-16 10:23

I have a function

var data = {};
var myFunc = function() {
  data.stuff = new ClassName().doA().doB().doC();
};

I\'d like to test that

2条回答
  •  无人及你
    2020-12-16 11:08

    Let’s do some code refactoring as we want implement constructor injection pattern as James Shore mentions that:

    Dependency injection means giving an object its own instance variables. Really. That’s it.

    var data = {};
    var stuff = new ClassName()
    
    var myFunc = function(stuff) { // move step of creation new object outside
      data.stuff = stuff.doA().doB().doC();
    };
    

    And time for some tests

    function ClassName() {
    }
    
    var data = {};
    var stuff = new ClassName()
    
    var myFunc = function(stuff) {
      data.stuff = stuff.doA().doB().doC();
    };
    
    
    describe('stub for ClassName implementation', function() {
      var stubStuff = {
        doA: function() {
          return stubStuff
        },
        doB: function() {
          return stubStuff
        },
        doC: function() {
          return stubStuff
        }
      }
    
      beforeEach(function() {
        spyOn(stubStuff, 'doA').and.callThrough();
      });
    
      it('calls "doA" on "myFunc" exection', function() {
        myFunc(stubStuff);
        expect(stubStuff.doA).toHaveBeenCalled();
      });
    });
    
    

提交回复
热议问题