测试该函数是否使用Jasmine在ES6构造函数中执行

时间:2016-09-16 08:29:59

标签: javascript jasmine ecmascript-6

我在JSFiddle上创建了a simple example来测试我在项目中遇到的问题:

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();
    });

  });
});

问题是我在构造函数中执行了一个方法,我想检查它是否已执行。为什么在我的例子中Jasmine告诉它不是?

1 个答案:

答案 0 :(得分:6)

问题是在安装间谍之前调用构造函数(使用new Test)。因此,该函数在被监视时已被调用。

要解决此问题,您可以在调用构造函数之前监视Test.prototype.sum

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

请参阅更新后的fiddle