2012-12-13 57 views
1

我正在嘗試編寫一個Ember視圖的基本測試,下面是這裏:http://shairez.com/2012/07/ember-js-tdd-how-to-test-your-ember-views/但我總是收到一個「Uncaught TypeError:Can not call method」appendTo '未定義'Jasmine,Ember Views和Runloop:不能調用未定義的方法'appendTo'

規格:

describe "my view", -> 

    myView = null 

    beforeEach -> 
    myView = Sysys.ActView.create() 
    Ember.run -> 
     myView.append() 


    afterEach -> 
    Ember.run -> 
     myView.remove() 
    myView = null 

    it "should be defined", -> 
    expect(myView).toBeDefined() 

    it "should have a button", -> 
    expect(myView.$("button.btn-primary").length).toEqual(1); 

的錯誤出現來自Ember.View.appendTo

this.$().appendTo(target) 

其中target<body class="ember-application">...</body>(如預期)和thismyView。然而,this.state是「預渲染」和this.$()是不確定的,這就是爲什麼出現錯誤。

我不知道我做錯了什麼:是越來越創建視圖,但不會呈現我想。正如本教程所建議的那樣,我還撥打。

我還注意到,即使我不運行任何測試,我仍然得到一個未捕獲的異常 - 這是同樣的事情,除了ApplicationView。所以我想知道如果我正在爲測試正確初始化所有東西。包含文件低於(使用Rails 3.2資產管道)

Spec.js.coffee

#=require_tree ./ 
#=require_tree ../../app/assets/javascripts 

應用程序/資產/ Javascript角/ application.js.coffee:

#= require jquery 
#= require jquery_ujs 

#= require vendor/handlebars-1.0.0.beta.6 
#= require vendor/ember-1.0.0-pre.2 
#= require vendor/ember-data 

#= require_self 
#= require sysys 
Sysys = Ember.Application.create(); 
#= require_tree . 

應用程序/ assets/javascripts/sysys.js.coffee:

#= require ./store 
#= require_tree ./models 
#= require_tree ./controllers 
#= require_tree ./views 
#= require_tree ./helpers 
#= require_tree ./templates 
#= require_tree ./routes 
#= require_self 

Sysys.initialize() 

回答

0

只有在插入元素後才能調用「this。$()」 DOM。既然你發現你仍然在國家「預渲染」,但尚未在DOM(「inDom」)的原因可能是在「重新解析」(請查看調用堆棧)。
這可能發生(例如)使用bindAttr而且即使認爲沒有插入到DOM(*咳嗽*調用堆棧*咳嗽*)到已經修改了它的綁定屬性時。

相關問題