2016-09-16 33 views
3

我已经在的jsfiddle创建a simple example来测试我在项目中遇到的问题执行:测试该功能在ES6构造用茉莉花

describe('testing es6 and jasmine', function() { 
    describe('let',() => { 
    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let 
    it('is es6 works', function() { 
     class Test { 
     constructor() { 
      var x = this.sum(1, 1); 
     } 
     sum(a, b) { 
      return a + b; 
     } 
     } 
     var test = new Test(); 
     spyOn(test, 'sum').and.callThrough(); 
     expect(test.sum).toBeDefined(); 
     expect(test.constructor).toBeDefined(); 
     expect(test.sum).toHaveBeenCalled(); 
    }); 

    }); 
}); 

问题是,我在构造函数中执行的方法,我想检查它是否被执行。为什么在我的例子中,茉莉花告诉它不是?

回答

5

问题是,您在安装间谍之前调用构造函数(使用new Test)。所以这个函数在被窥探的时候已经被调用了。

为了解决这个问题,你可以窥视Test.prototype.sum调用构造函数之前

spyOn(Test.prototype, 'sum').and.callThrough(); 
var test = new Test(); 

查看更新fiddle