我在Backbone的View初始化方法中执行一个方法。
initialize : function(options) {
this.myMethod();
}
我试图使用sinon来监视这个方法:
this.spyMyMethod = sinon.spy(this.view, "myMethod");
结束
it('should call my method', function(){
expect(this.spyMyMethod).toHaveBeenCalledOnce();
});
但测试失败了......
有什么想法吗?
答案 0 :(得分:3)
你太晚监视这个方法了。
无论您在何处分配this.view
,我都认为它来自new Views.SomeView()
之类的呼叫。 new
调用将使initialize
函数执行。
<强>更新强>
我真的不推荐这样做,因为它非常混乱,但你可能会做类似下面的事情:(我不知道sinon但是这就是你用基础茉莉花间谍对象做的事情)< / p>
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();
});
另一个Possiblilty
看起来可以用下面的间谍覆盖该方法。如果可行,那可能是最干净的方法。
it('should call my method', function(){
spyOn(Views.SomeView.prototype, "myMethod");
new Views.SomeView();
expect(Views.SomeView.prototype.myMethod).toHaveBeenCalled();
});
答案 1 :(得分:0)
您需要为要调用的initialize方法返回视图的 new 实例。
我不确定this.view = new View();但是已经
了