您在监视该方法为时已晚。
无论您在哪里分配this.view
,我都认为它来自像new Views.SomeView()
. 正是该new
调用将initialize
执行该函数。
更新
我真的不建议这样做,因为它非常混乱,但您可以执行以下操作:(我不知道 sinon,但这是您使用基本 jasmine 间谍对象的方式)
it('should call my method', function(){
var dummyView = new Views.SomeView();
spyOn(dummyView, "myMethod");
spyOn(Views, "SomeView").andCallFake(function () {
dummyView.initialize();
return dummyView;
});
new Views.SomeView();
expect(dummyView.myMethod).toHaveBeenCalled();
});
另一种可能性
看起来有可能用下面的间谍覆盖该方法。如果可行,这可能是最干净的方法。
it('should call my method', function(){
spyOn(Views.SomeView.prototype, "myMethod");
new Views.SomeView();
expect(Views.SomeView.prototype.myMethod).toHaveBeenCalled();
});