2012-04-01 73 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