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

标签 javascript jasmine ecmascript-6

我创建了 a simple example在 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();
    });

  });
});

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

最佳答案

问题是您在安装 spy 之前调用了构造函数(通过使用 new Test)。因此,该函数在被监视时已经被调用。

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

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

查看更新的 fiddle .

关于javascript - 使用 Jasmine 测试函数是否在 ES6 构造函数中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39526944/

相关文章:

javascript - dojo 小部件在被销毁时会发出事件吗?或者您可以强制它发出事件吗?

使用 Jasmine 进行 AngularJS Controller 单元测试

angularjs - 如何使用 Bamboo 的 Karma(以前是 Testacular)运行 Jasmine 测试?

javascript - 生成器函数如何在 Javascript 中工作?

javascript - 错误 : [vuex] expects string as the type, 但发现未定义

javascript - Babelify 多个目录中的文件

javascript - Protractor javascript执行上下文堆栈顺序

javascript - 访问控制允许来源和 Angular.js

javascript - 使用带有编译 typescript 的 jasmine karma 测试组件时如何解决 "define is not defined"错误?

javascript - 如何检索 mat-checkbox 值