我正在使用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()。解决这个问题的最佳方法是什么?
答案 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是否已按预期更改