测试ember或sprout core 2.0视图

时间:2012-02-05 15:29:50

标签: ember.js

我想测试一个ember控制器是否正确地向DOM添加了一个视图。我有以下Ember控制器:

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')元素是否在Dom中。它会显示在浏览器中,以便在将来的某个时刻添加。

我有以下测试:

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

我知道有一个didInsertElement事件,我应该使用它还是应该如何测试这种情况?

1 个答案:

答案 0 :(得分:1)

Ember将DOM操作延迟到“稍后”通过运行循环。要进行测试,可以通过调用Ember.run.end()强制运行循环立即执行其内容。以下内容应通过:

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

通常,您不必在应用程序代码中刷新运行循环......您可以让Ember在准备好时执行所有操作。但在您的测试代码中,有时是必要的。