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

net*_*jor 3 javascript jasmine ecmascript-6

我在JSFiddle上创建了一个简单的例子来测试我在项目中遇到的问题:

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

  });
});
Run Code Online (Sandbox Code Playgroud)

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

rob*_*lep 6

问题是new Test在安装间谍之前调用构造函数(通过使用).因此,该功能在被侦察时已被调用.

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

spyOn(Test.prototype, 'sum').and.callThrough();
var test = new Test();
Run Code Online (Sandbox Code Playgroud)

看到更新的小提琴.