我在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告诉它不是?
答案 0 :(得分:6)
问题是在安装间谍之前调用构造函数(使用new Test
)。因此,该函数在被监视时已被调用。
要解决此问题,您可以在调用构造函数之前监视Test.prototype.sum
,:
spyOn(Test.prototype, 'sum').and.callThrough();
var test = new Test();
请参阅更新后的fiddle。