2017-12-02 10 views
0

Quitit 테스트를 구성하여 ajax 포스트 콜을 테스트하려고합니다. 나는 전화를 조롱하기 위해 mockajax를 사용하고 있습니다. 그러나 비동기 호출을 사용할 수있는 테스트를 얻을 수 없습니다.mockajax로 Qunit ajax 비동기 호출

source.js :

가 여기 내 소스 코드

ajaxFunc = function(element){ 
    $.post({ 
    type:'POST', 
    url: '/temp/', 
    dataType:'json', 
    success: function(data){ 
    element.text("changed in func"); 
    }, 
    error: function(data){ 
    //do something 
    }, 
    timeout: 60000 
     }); 
} 

syncFun = function(element){ 
    element.text("changed in func"); 
} 

여기 내 테스트 코드입니다 :

tests2.js

function mockSuccess(){ 
    $.mockjax({ 
    url: "/temp/", 
    responseText: { success: true } 
    }); 
} 

QUnit.test("test ajax async", function(assert) { 
    mockSuccess(); 
    var done = assert.async(); 
    var element = document.createElement("div"); 
    ajaxFunc($(element)); 
    $(element).text("old"); 
    setTimeout(function() { 
    assert.strictEqual($(element).text(), 'changed in func'); 
    done(); 
    }); 
}); 

QUnit.test("test sync", function(assert) { 
    var element = document.createElement("div"); 
    $(element).text("old"); 
    syncFun($(element)); 
    assert.strictEqual($(element).text(), 'changed in func'); 
}); 

실패 첫 번째 테스트는, 두 번째 것은 성공합니다. 성공 콜백 내에서 source.js에 주석을 달면 실제로 게시물이 성공하고 요소 텍스트가 변경되는 것을 볼 수 있습니다.

즉, 게시물의 결과를 테스트하는 것 외에는 모든 것이 올바르게 작동합니다.

나는 https://qunitjs.com/cookbook/을보고 행운을 빌어 오버플로 스택 예제를 보았다. 나는 예 qunit의 GitHub의에서이 같은 보았다

QUnit.test("test ajax async", function(assert) { 
    mockSuccess(); 
    var done = assert.async(); 
    var element = document.createElement("div"); 
    ajaxFunc($(element)); 
    $(element).text("old"); 
    setTimeout(function() { 
    assert.strictEqual($(element).text(), 'changed in func'); 
    done(); 
    }, 800); 
    // ^^^ 
}); 

, 그래서 나는이 올바른 것 같아요 : 그냥 작업을 비동기 호출을 얻을 수 밀리 초 수를 추가 할 필요가 같은

답변

1

은 같습니다 시간 함수를 충분히 높게 설정하지 않은 문제를 볼 수 있습니다.

나는 성공에서 발생하는 모든 처리를 이미 이동 시켰습니다. 오류 : post 함수 외부에서 Ajax 호출과 독립적으로 테스트 할 수 있습니다. 그러나 실제 유형을 다양한 유형의 오류에 대해 테스트하고 싶었습니다. .