2011-09-23 6 views
4

Jasmine BDD 프레임 워크에서 ajax를 실행하는 데 문제가 있습니다.Ajax가 Jasmine과 함께 실행되지 않았습니다.

가짜 응답을하지 말고 실제 아약스 호출을 테스트하고 싶습니다. 나는 설명서를 읽고 모든 것을 시도했지만 아약스 코드는 단순히 무시 된 것 같습니다. 스파이를 사용해 보았지만 도움이되지 않는 것 같습니다.

작동하지 않는 아주 기본적인 예 :

describe("A jQuery ajax test", function() { 
    it("should make AJAX request", function() { 
    expect(testAjax()).toBe(1); 
    }); 
}); 

function testAjax() { 
    var ret=0 
    $.ajax({ 
    type: "GET", 
    url: "obj.json", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(data){ret=1;} 
    }); 
    return ret; 
} 

반환은 항상 0입니다, 그것은 성공의 기능을 입력하지 않습니다.

내가 뭘 잘못하고 있니?

+0

다음 AJAX를 실행하는 동안 당신이 Cross-origin_resource_sharing에 의해 제한되고 서버가 응답 헤더의 "요청 도메인을 액세스 제어 - 허용 - 기원"의 일환에 따라 반환해야합니다 전화 누군가 succcessfully jasmine을 공유하는 Ajax를 실행하는 예제 프로젝트를 가지고 있습니까? – a2011

답변

2

내 질문에 답하십시오. Jasmine에서의 Ajax 호출은 비동기 적이어야합니다. 당신이 그것을 테스트 할 수 있도록 코드를 변경하지 않으려면 당신은 비동기 false로 비동기 설정하는 것은 문제를 해결하는 동안

it("getsetting", function() { 
    $.ajaxSetup({ 
    async:false 
    }); 
    expect(getUserSetting(101,0)).toBe('30'); 
}); 
1

는 일반적으로 옵션이 아니다 거짓의 dafault 값을 설정하기 위해 ajaxSetup을 사용할 수 있습니다 대부분의 웹 애플리케이션에서는 Ajax 호출 중에 전체 페이지가 잠길 수 있기 때문에

웹 서비스에서 응답을받을 때 실행되는 testAjax() 메소드에 콜백 함수를 전달합니다. 그런 다음 콜백 내부에 어설 션 (예상)을 할 수 있습니다.

은 다음과 비슷한 모습이 될 것입니다

function testAjax(callback) { 
    var ret=0 
    $.ajax({ 
    type: "GET", 
    url: "obj.json", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(data){ 
     callback(ret); 
    }, 
    error:function(){ 
     callback(ret); 
    } 
    }); 
} 

describe("A jQuery ajax test", function() { 
    it("should make AJAX request", function() { 
    testAjax(function(ret){ 
     expect(ret).toBe(1); 
    });  
    }); 
}); 
+1

문제는 async가 없다면 false입니다. false Ajax 호출은 결코 완료되지 않습니다. – a2011

0

을 당신이 비동기 지원에 매우 덕분에 가능 자스민가 가지고있는, 내가 도움이 될 예를 들어 다음과 같은 희망입니다 자스민를 사용하여 통합 테스트를 작성하고자하는 것을 이해 재스민의 비동기 기능을 사용하여 실제 통합 테스트를 작성하는 방법을 이해해야합니다.

describe("A jQuery ajax test", function() { 

it("should make AJAX request", function() { 
var return = null; 


runs(function(){ 
// hosts actual ajax call 
     return = testAjax(); 
}); 

waitsFor(function(){ 
//this method polls until the condition is true or timeout occurs,whichever occurs first 
return return.readyState==4; 
},"failure message",700//timeout in ms 
); 

runs(function(){ 
// 2nd runs block can be used to verify the actual change in state 
// Add other relevant expectation according to your application context. 
     expect(return).toBeTruthy(); 

}); 

}); 

});

function testAjax() { 
// result here is a deffered object whose state can be verified in the test 
var result = null; 
result = $.ajax({ 
    type: "GET", 
    url: "obj.json", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function() { //do something on success} 
    }); 
return ret; 
}​ 

참고 :

관련 문제