2015-05-15 227 views
0

我的茉莉花測試用於通過。但是,我實現了一個基礎骨幹視圖,該視圖提供了幾個常見視圖的功能。在此之後,我無法通過下面的簡單測試。看起來DOM元素(div)不存在,因此我的show view沒有正確渲染。任何想法或建議,爲什麼這是發生和解決辦法?茉莉花/骨幹

兩個骨幹觀點,一種擴展超出其他的:

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); 
      } 
     }); 
+0

沒有完整的代碼是不可能告訴的。分享更多,最好在jsFiddle –

+0

是的,你是對的。但是,這是很多代碼。我想我的主要問題是調用.render(),如上所述,是茉莉花浸入到渲染功能的基本視圖,而不是stockShowView的明確性?它使用Backbone的路由器,因爲我有一個if語句(添加到問題)?或者它只是試圖渲染stock_showView? – snewc

回答

0

您應該用大寫字母寫入tagName元素。試試這個:

expect(stock_showView.el.nodeName).toEqual("DIV"); 
+0

也可以使用這篇文章http://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine-sinon.html對於初學者來說非常好的教程 –