2014-03-12 2 views
3

QUnit에서 Ember.js 어플리케이션에 대한 통합 테스트를 작성하고 있습니다. 테스트 전에 전용 테스트 API에 HTTP 요청을 보내 일부 테스트 데이터를 시드하려고합니다. jQuery.post을 사용하여 POST 요청을 발행하고 Ember.RSVP.Promise.cast을 사용하여 jQuery 약속을 RSVP 약속으로 변환합니다. 그러나 결코 해결되지 않는 것처럼 보입니다. 아래의 코드에서, 그것은 단지 멈춘다. 문자열 "STARTING"이 인쇄되지만 "DONE"이나 "FAIL"도 인쇄되지 않습니다.QUnit 통합 테스트에서 RSVP.Promise를 해결할 수 없습니다.

http://emberjs.com/api/classes/Ember.RSVP.Promise.html의 "고급 사용법"섹션에 설명 된대로 새 RSVP 약속을 만들려고했지만 사용하지 않으려 고합니다. jQuery 약속을 RSVP Promise에 포장하지 않으면 "DONE" 또는 "FAIL"에 도달합니다.

왜 RSVP Promise가 해결되지 않습니까?

function create_teacher() { 
    var url = "<%= testing_teacher_path %>"; 

    return Ember.RSVP.Promise.cast(
    Ember.$.post(
     url, 
     { 
     user: { 
      first_name: "John", 
      last_name: "Doe" 
      school: "EE3", 
      email: "[email protected]", 
      password: "password" 
     } 
     } 
    ) 
); 
} 

module("Teacher Dashboard", { 
    setup: function() { 
    console.log("STARTING"); 
    Ember.run(HstryEd, HstryEd.advanceReadiness); 
    }, 
    teardown: function() { 
    console.log("TEARING DOWN"); 
    HstryEd.reset(); 
    } 
}); 

asyncTest("Login", function() { 
    expect(1); 

    var teacher = create_teacher(); 
    teacher.then(function() { 
    console.log("DONE"); 
    ok(true, "done"); 
    start(); 
    }, 
    function() { 
    console.log("FAIL"); 
    ok(false, "fail"); 
    start(); 
    }); 
}); 

답변

2

테스트 모드에서는 Ember 런 루프가 비활성화되어있을 수 있습니다. ic-ajax을 확인 했습니까? https://github.com/instructure/ic-ajax Ember가 테스트 할 때조차도 좋아할만한 형태로 약속 스타일 jQuery ajax 요청을 제공합니다. 테스트에서 Ember runloop 문제를 해결하기 위해 가져 왔으며 지금까지 큰 성과를 거두었습니다.

teacher.then(..Ember.run으로 묶어보십시오.

+0

'ic-ajax'를 사용하여 트릭을했습니다. 감사합니다! – yorbro