我正在尝试使用 Jasmine 和 Sion 编写单元测试,但是在使用 RequireJs 加载模块时我很难找到以下等效项:
sinon.stub(window, "MyItemView");
使用 RequireJs 时,我无法以这种方式存根,因为 MyItemView 未附加到窗口。
以下是我需要存根 MyItemView 的示例:
var MyView = Backbone.View.extend({
el: '#myElement',
initialize : function() {
var that = this;
this.collection.fetch({
success : function() {
that.render();
}
});
},
render : function() {
this.collection.each(this.renderItem);
}
renderItem: function(model){
var myItemView = new MyItemView({model: model});
$('#myElement').append(myItemView.render().el);
},
...
现在,使用 Jasmine 我可以测试 innerHtml 是否包含预期的 HTML:
it('View should contain correct Html', function(){
var collectionFetchStub = sinon.stub(this.myCollection, 'fetch').yieldsTo('success', this.myCollection);
this.view = new MyView({collection: this.myCollection});
expect(this.view.el.innerHTML).toContain('<li><a href=""> 1 : test </a></li>');
// Remove Stubs
collectionFetchStub.restore();
});
但是,此测试依赖于 MyItemView 的呈现,这对于单元测试来说并不理想。这个问题的最佳解决方案是什么?我是 javascript 的新手,对此的解决方案似乎很复杂。