2012-02-05 39 views
0

我想测试一个烬控制器是否正确地添加一个视图到DOM。我有以下灰烬控制器:测试烬心或发芽核心2.0视图

Lead.Controllers.UrlSearch = Ember.Object.extend 
    init: -> 
    @_super() 

    @url_search = Lead.UrlSearch.create() 

    @url_search.set('search_url', 'http://www.bdec-online.com/bd-cmpy/bd-cz.cfm') 

    @view = Ember.View.create 
     controller: @ 
     urlSearchBinding: 'controller.url_search' 
     templateName: 'app/templates/url_search/show' 

    @view.appendTo('#fieldset') 
    console.log($('#url_search_url').length) #0 in console but appears in browser 
    $('#url_search_url').focus() 

我接着要测试的是$(“#url_search_url”)元素在大教堂。它显示在浏览器中,因此它将在未来的某个时间被添加。

我有以下测试:

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

我知道有一个didInsertElement事件,我应该用这个或如何测试这种情况呢?

回答

1

Ember推迟DOM操作,直到通过运行循环“稍后”。为了测试,您可以通过调用Ember.run.end()来强制运行循环立即执行其内容。下面应该通过:

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

通常,您不必刷新运行循环在应用程序代码...你可以让灰烬执行的一切,当它准备这样做。但在您的测试代码中,有时需要这样做。

+0

你是一个绅士和学者!这让我挠了挠头。 – dagda1 2012-02-05 19:25:01