【发布时间】:2015-07-26 21:59:21
【问题描述】:
我的 Jasmine 测试曾经通过。但是,我实现了一个 Base Backbone 视图,它为一些常见视图提供了功能。在此之后,我无法通过下面的简单测试。似乎 DOM 元素 (div) 不存在,因此我的显示视图未正确呈现。关于为什么会发生这种情况以及解决方法的任何想法或建议?
两个主干视图,一个从另一个延伸出来:
var stockShowView = Base.extend({
tagName: 'div',
className: 'showSecurity',
template: _.template(showTpl),
....
render: function() {
this.$el.html(this.template({
stock: this.model.toJSON()
}));
}
....return stockShowView;
var Base = Backbone.View.extend({
initialize: function() {....//no render function
茉莉花测试
stock_showView = new stockShowView({model: model});
stock_showView.render();
expect(stock_showView.tagName).toEqual('div');
错误
Cannot read property 'length' of undefined
路由器
router.on('route:showPost', function(id) {
if (globals.stocks) {
var stockpost = new StockModel({_id: id});
stockpost.fetch({
reset: true,
success: function(stockpost) {
var stock_showView = new stockShowView({model: stockpost});
$("#view_box").html(stock_showView.render().el);
}
});
【问题讨论】:
-
没有完整的代码是不可能的。分享更多,最好是在 jsFiddle 中
-
是的,你是对的。但是,它有很多代码。我想我的主要问题是当像上面那样调用 .render() 时,Jasmine 是否会进入渲染函数的基本视图而不是 stockShowView 显式?它是否使用了 Backbone 的路由器,因为我有一个 if 语句(添加到问题中)?还是只是试图渲染 stock_showView?
标签: backbone.js jasmine