2016-09-29 2 views
0

최근 코드베이스에 커스텀 글로벌 에러 핸들러를 구현했고, QUnit + Sinon 스위트에서 그 동작을 테스트하고 싶었습니다. 그러나,이 작동하지 않는 것 다음 banana() 호출에 의한 ReferenceError 이후QUnit/Sinon으로 window.onerror를 테스트하십시오.

QUnit.test("It should fire an ajax request on errors", function(assert) { 
    var done = assert.async(); 

    var myOnerror = window.onerror; 
    window.onerror = function(msg, url, line, col, error) { 
     myOnerror(msg, url, line, col, error); 
     //Some assertions on myOnerror execution 
     done(); 
    }; 

    banana(); //Trigger an error to have window.onerror execute 
}); 

실제로 실패와 테스트 실행을 중지 QUnit 자체에 의해 체포된다.

내 스스로 오류를 처리하거나 오류를 던져서 내 자신의 window.onerror이 QUnit 대신 실행되도록 QUnit에게 알릴 수있는 방법이 있습니까?

답변

1

문제는 주목할 수 있듯이 QUnit이 오류를 포착한다는 것입니다. 테스트 중 하나가 예기치 않은 오류를 실제로 발생 시키면 테스트 실행이 폭탄이되지 않도록이 작업을 수행해야합니다. 여기의 트릭은 이 오류가 발생했는지 테스트하지 않으려는 것입니다.. 대신 실제로는 onerror 처리기가 있고 올바르게 작동하는지 테스트하려고합니다.

오류 처리기가 올바르게 작동하는지 테스트하려면 오류을 던지지 않아도됩니다! 이상하게 보일 수도 있지만 그렇지 않습니다. 대신 가짜 인수로 테스트 내에서 오류 핸들러 함수를 호출 할 수 있습니다.

QUnit.test("It should fire an ajax request on errors", function(assert) { 
    // Note that Error throwing is NOT async, so you shouldn't need this. 
    // var done = assert.async(); 

    assert.strictEqual(window.onerror, myOnerror); 

    myOnerror(
     "some test message", 
     "src/js/ajax-stuff.js", 
     13, 
     29, 
     new ReferenceError("some test message") 
    ); 

    // write assertions here for what `MyOnerror` should have done. 
}); 
+0

오류가 발생했을 때 window.onerror가 호출되고 (실제로는 테스트를 통해 보장해야 함) 실제로 테스트해야하는 것은 ' myOnError' 님이하고 있습니다 .... 감사합니다! – Raibaz