在集合获取成功回调调用渲染时测试Backbone View

时间:2013-04-04 15:28:32

标签: testing backbone.js jasmine backbone-views sinon

我正在使用Jasmine和Sinon来测试我的Backbone应用程序,但我遇到了一些麻烦。我正在尝试测试在我的视图初始化时调用渲染

我有以下观点:

var MyView = Backbone.View.extend({
    el: '#myElement',
    initialize : function() {
        var that = this;
        this.collection.fetch({
            error : function() {
                alert("error!");
            },
            success : function() {
                that.render();
            }
        });
    },

    render : function() {
        this.collection.each(this.renderItem);
    }

    ...

我的测试

it('Should call render when view is instantiated', function(){          
                spyOn(MyView.prototype, 'render');
                var myCollection = new MyCollection();
                this.view = new MyView({collection: myCollection});
                expect(MyView.prototype.render).toHaveBeenCalled();
        });

问题是在执行fetch的成功回调之前调用expect()。解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

所以这里的问题是你测试2件事,视图和集合。您应该存根集合并只测试视图:

sinon.stub(myCollection, 'fetch').yieldsTo('success') // will immediately call the success methode
sinon.stub(myCollection, 'each').callsArg(0) // will immediately call this.renderItem

对你想要测试的课程进行间谍活动也不是一个好主意。在您的情况下,您应该在调用this.renderItem后测试视图的innerHTMl是否已按预期更改