2012-04-01 35 views
2

在生產環境中運行代碼時,我不必與Ember.js runloop進行交互,但在我的測試中,有時我必須調用Enber.run.end()來進行測試通過。這可能會造成其他測試失敗的影響。測試Ember.js和runloop

例如,這裏是我的spec_helper:

beforeEach -> 
    $('#jasmine_content').append('<div id="fieldset"></div>') 
    Ember.test = true 
    Lead.run() 

$ -> 
    $('body').append($('<div id="jasmine_content"></div>')) 

我設置Ember.test標誌設置爲true在上面的代碼,我不能完全肯定這是什麼一樣。

Lead.run()創建灰燼應用:

window.Lead = Ember.Application.create 
    Controllers: {Leads: {}} 
    Models: {} 
    Views: {} 

    run: -> 
    @initEvents() 
    @.set('search', Lead.Controllers.UrlSearch.create()) 
    # etc. 

在一些測試中,我發現自己不得不調用ember.run.end(),以確保項目將在DOM等

describe 'Controllers', -> 
    describe 'UrlSearch', -> 
    it 'should append view', -> 
     Ember.run.end() 
     expect($('#goButton').length).toEqual(1) 

從單個測試結束runloop感覺不對。

每當我更新我spec_helper這樣:

beforeEach -> 
    $('#jasmine_content').append('<div id="fieldset"></div>') 
    Ember.test = true 
    Lead.run() 
    Ember.run.end() 

我得到錯誤信息,如:

無法在的Metamorph執行操作,是不是在DOM

必須有當前運行循環。

是否有任何指導或最佳做法來協商測試runloop?

回答

1

你應該看看測試,例如each_test.js。正如你所看到的,添加以DOM或操縱控制器的性能,......總是內Ember.run完成,以確保所有的改變和視圖更新刷新和綁定同步:

Ember.run(function(){ 
    view.append(); 
    ... 
}); 
+1

each_test.js鏈接破碎。 – Intentss 2013-05-24 18:00:45

+0

@Intentss好趕上,我已經更新了鏈接 – pangratz 2013-05-25 16:10:25