2012-04-06 3 views
2

jasmine과 guard를 사용하여 Ember 기반의 프론트 엔드에서 레일 3.2 애플리케이션을 테스트하려고합니다. 이를 위해 jasminerice와 guard-jasmine, phantomjs를 사용합니다. 설정은 매우 쉽고 간단했으며 몇 가지 샘플 사양을 실행할 수 있습니다. 엠버와 함께 노는 것에 관해서는, 모든 것이 화가납니다. 나는 비디오 리더 클래스를 테스트하는 스펙을 가지고있다. loadVideo 메서드를 호출 할 때 videoHeight 및 videoWitdh 속성을 해당 비디오 DOM 요소의 값으로 설정해야합니다. 브라우저에서 jasmine을 실행하면 테스트가 통과하지만 가드와 팬텀을 실행하면 실패합니다. 나는 "640과 동등한 것으로 예상되지 않음"을 얻었다. phantomjs에서 테스트를 실행할 때 내 DOM 요소가 고려되지 않은 것으로 보입니다.헤드리스 테스팅 Ember 애플리케이션 (가드와 자스민)

describe "VideoReader", -> 
    it "loads video from video DOM element", -> 
    videoDOM = Ember.$("<video width='640' height='480'><source src='/test.mp4'></source></video>")[0]; 

    player = Topper.VideoReader.create(); 

    player.loadVideo(videoDOM); 

    videoHeight = player.get('videoHeight'); 
    videoWidth = player.get('videoWidth'); 

    expect(videoHeight).toEqual(480); 
    expect(videoWidth).toEqual(640); 

스펙이 올바르게 작성 되었습니까?

답변

3

Testing in Ember.js에 대한 블로그 게시물을 읽어야합니다.

귀하의 Topper.VideoReader이 어떤 모양인지는 모르지만 귀하의 문제는 DOM에서 무언가를 조작하고 Ember.js가 이러한 변경 사항을 전파 할 수있는 기회를 제공하지 않는다고 생각합니다. 테스트에서 볼 수 있듯이 Ember.run(function(){...}) 호출에서 바인딩과 상호 작용하거나 DOM을 조작하는 호출을 랩핑해야합니다 (예 : child_views_test.js).


아래의 토론에서 요약 :

  • 는 DOM과 상호 작용을 테스트 할 코드는, 그것이 Ember.run 호출에 포장합니다.
  • 코드에서 해고 이벤트를 검사 할 당신은 그들이 발사 할 때 정확하게 제어 할 수없는 경우, QUnit의 asyncTest
+0

내 loadVideo 방법처럼 테스트 프레임 워크에서 비동기 테스트 기능을 사용 모양은 다음과 같습니다. loadVideo : function (videoDOM) { this.set ('videoHeight', videoDOM.height); this.set ('videoWidth', videoDOM.width); }, – jrabary

+0

'loadVideo' 호출을'Ember.run (function() {player.loadVideo (videoDOM);})에 랩핑 해 보았습니다. – pangratz

+0

링크를 제공해 주셔서 감사합니다. – pjmorse

관련 문제