2012-04-01 4 views
2

프로덕션 환경에서 코드를 실행하는 동안 Ember.js runloop과 상호 작용할 필요는 없지만 테스트에서 Enber.run.end()를 호출하여 테스트를 수행해야하는 경우가 있습니다. 패스. 이것은 다른 테스트를 실패하게 만드는 효과를 노크했을 수 있습니다.Ember.js 및 runloop 테스트

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

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

나는 이것이 무엇을 완전히 확실하지 않다 위의 코드에서 true로 Ember.test 플래그를 설정하고있다 :

예를 들어, 여기 내 spec_helper입니다. 일부 테스트에서

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

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

, 나 자신이 항목은 DOM 등

에있을 것입니다 수 있도록 ember.run.end()를 호출 할 필요가 찾을 :

Lead.run()는 엠버 응용 프로그램을 만듭니다

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

개별 테스트의 런 루프 종료가 잘못되었습니다. 나는이 내 spec_helper를 업데이트 할 때마다

:

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

내가 얻을 오류 메시지와 같은 :

는 DOM에없는하는 MetaMorph로부터에 대한 작업을 수행 할 수 없습니다

또는

현재 실행 루프가 있어야합니다.

테스트에서 런 루프를 협상하는 데 유용한 지침이 있습니까?

답변

1

시험을보아야합니다 (예 : each_test.js). 당신이 컨트롤러의 속성을 DOM에보기를 추가하거나 조작, 볼 수 있듯이, ... 항상 모든 변경 및보기 업데이트 플러시를 보장하기 위해 Ember.run 내에서 수행하고, 바인딩 동기화 :

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

each_test.js 링크입니다 부서진. – Intentss

+0

@Intentss 좋은 소식, 링크를 업데이트했습니다. – pangratz