我试图窥探Backbone视图。在其中一个视图函数中,创建一个对象并将其附加到视图:
var BackboneView = Backbone.View.extend({
anObject: null,
.....
viewFunction: function() {
if (!this.anObject) {
this.anObject = new theObject();
this.anObject.setTimeout(10);
}
}),
....
});
return BackboneView;
对象看起来像这样(并且无法更改):
var theObject = function () {
this.setTimeout = function (timeout) {
//set timeout
};
return this;
});
return theObject;
我想确保调用setTimeout。所以我试过了:
it('theObject.prototype.setTimeout called', function () {
spyOn(theObject.prototype, 'setTimeout');
myBackboneView.viewFunction()
expect(theObject.prototype.setTimeout).toHaveBeenCalled();
});
但我收到错误:
setTimeout() method does not exist
所以我试图通过Backbone视图监视它:
it('myBackboneView.anObject.setTimeout called', function () {
spyOn(myBackboneView.anObject, 'setTimeout');
myBackboneView.viewFunction();
expect(myBackboneView.anObject.setTimeout).toHaveBeenCalled();
});
但我可以预见到错误:
spyOn could not find an object to spy upon for setTimeout()
我是如何确定调用setTimeout()的?
答案 0 :(得分:1)
setTimeout()方法不存在
因为你没有在函数原型上设置setTimeout。
如果你想在原型上使用一个函数,你需要将它放在一个原型上,那么你可以监视这个函数。
theObject.prototype.setTimeout=function(){/*some code*/}
并且不需要在构造函数中返回它。
this.setTimeout = function (timeout) {
//set timeout
};
return this; // this is wrong!!!