2009-02-06 6 views
35

두 가지 질문이 있습니다.Qunit에서 매개 변수화 된 테스트 및 조롱

qunit에서 단위 테스트를 매개 변수화 할 수 있습니까?

qunit과 어떻게 조롱합니까? 조롱 한 getJSON 전화? 여기

var functionToTest = function() { 
     $.ajax({ 
      url: 'someUrl', 
      type: 'POST', 
      dataType: 'json', 
      data: 'foo=1&foo=2&foo=3', 
      success: function (data) { 
       $('#main').html(data.someProp); 
      } 
     }); 
    }; 

시험 사건 :

감사

답변

49

아약스 요청을 조롱하는 것은, 당신이 이런 식으로 뭔가를 시도 할 수 있습니다 들어

... 여기

이 기능을 테스트 할입니다
test('ajax mock test', function() { 
     var options = null; 
     jQuery.ajax = function (param) { 
      options = param; 
     }; 
     functionToTest(); 
     options.success({ 
      someProp: 'bar' 
     }); 
     same(options.data, 'foo=1&foo=2&foo=3'); 
     same($('#main').html(), 'bar'); 
    }); 

jQuery의 ajax 함수를 근본적으로 무시하고 다음을 확인합니다. 2 일 : - 아약스 기능 에 전달 된 값은 - 성공 콜백을 호출하고이

+4

그것은 기능 (PARAM) {옵션 = PARAM를} 얻을 반 시간 정도 걸렸습니다,하지만 그것은 나를 공격이 .. . 정말 멋진. –

+0

니스. 정말 좋은. – StuperUser

+0

중첩 호출을 테스트하는 경우 이러한 옵션은 배열에 보관하는 것이 가장 좋으며 각 호출에 대해 해당 배열에 대한 옵션 개체를 .push() 할 때 사용합니까? – StuperUser

5

방금 ​​Sinon.JS을 사용하기 시작했습니다.이 템플릿은 XMLHttpRequests를 조롱하고 간단한 가짜 서버 API를 제공하기 시작했습니다. 정말 사용하기 쉽습니다! 또한 qunit와의 통합도 제공합니다.

15

jQuery의 AJAX 기능을 재정의하는 대신 .appendTo에서 개발 한 jQuery Mockjax 플러그인을 사용할 수도 있습니다. 이 플러그인은 본질적으로 다른 대답이 제시하는 것을 수행하지만보다 정교한 조롱을 허용합니다. 이 기능이있는 경우 예를 들어, : 두 번째 조롱 기능이 포함될 수

$.mockjax({ 
    url:"/api/user", 
    type:"GET", 
    response:function(requestData){ 
     //handle the mock response in here 
     this.responseText = '{"fullname":"Mr. Foo Bar"}'; 
    } 
}); 

:

$.ajax({ 
    url:"/api/user", 
    type:"GET", 
    dataType:"json", 
    data:'{"uid":"foobar"}', 
    success:function(data){ 
     console.log("Success!"); 
    }, 
    error:function(data){ 
     console.log("Error!"); 
    } 
}); 

당신은 단순히 자동으로 jQuery를에 포함 된 기능 mockjax를 호출하여 mockjax 그것을 조롱 수 있습니다 외부 JavaScript 파일에서 "mocks.js"라고 말하면됩니다. 수행해야 할 다른 유일한 작업은 mockjax 라이브러리 (https://github.com/appendto/jquery-mockjax/에서 찾을 수 있습니다)입니다. 명심해야 할 것은 모든 XMLHttpRequests가 아니라 jQuery ajax 호출 만 모의합니다. 그렇게하고 싶다면 @ bertvh의 조언에 따라 Sinon.js를 사용하십시오.

+1

+1 to mockjax. 방금 사용하기 시작 했으므로 단위 테스트뿐만 아니라 화면 개발을위한 더미 데이터에도 유용합니다. 내가 가진 유일한 문제는 json 데이터 파일이 Chrome 브라우저에서 캐시되고 있다는 것입니다. 캐시를 지우면 오래된 파일 문제가 해결되었습니다. – Evildonald

관련 문제