在生产中运行代码时,我不必与Ember.js runloop进行交互,但在我的测试中,我有时必须调用Enber.run.end()来使测试通过。这可能会导致其他测试失败的影响。
例如,这是我的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()创建Ember应用程序:
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()
我收到如下错误消息:
无法对不在DOM中的Metamorph执行操作
或
必须有当前的运行循环。
是否有任何关于通过测试协商runloop的指导或最佳实践?
答案 0 :(得分:1)
您应该查看测试,例如each_test.js。如您所见,将视图添加到DOM或操纵控制器的属性,...始终在Ember.run
内完成,以确保刷新所有更改和视图更新并同步绑定:
Ember.run(function(){
view.append();
...
});