监视在Backbone视图中创建的对象的功能

时间:2014-05-09 12:32:42

标签: backbone.js jasmine

我试图窥探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()的?

1 个答案:

答案 0 :(得分:1)

  

setTimeout()方法不存在

因为你没有在函数原型上设置setTimeout。

如果你想在原型上使用一个函数,你需要将它放在一个原型上,那么你可以监视这个函数。

theObject.prototype.setTimeout=function(){/*some code*/}

并且不需要在构造函数中返回它。

  this.setTimeout = function (timeout) {
        //set timeout
    };

    return this; // this is wrong!!!