2016-11-30 5 views
0

뷰에 렌더링 된 데이터 테이블에 대한 단위 테스트를 작성하고 데이터 테이블 렌더링을 성공적으로 테스트 할 수 있습니다. 그 평균 테이블 렌더링 기반 아약스 응답입니다. 그러나 이벤트 콜백 (draw, xhr과 같은) 내부에 작성된 일부 로직을 테스트하려고 할 때 이벤트가 발생하지 않는 것으로 보입니다.jQuery Datatable - 단위 테스트 로직 상주 이벤트 콜백

var table = this.ui.table.DataTable(dataTablesOptions) 
.on('xhr', function($event, dataTableSettings, jsonResponse, xhr) { 
    //some logic inside 
}}.on('draw', function ($event, dataTableSettings){ 
    //logic 
}); 

모든 것이 응용 프로그램에서 올바르게 작동하며 쓰기 단위 테스트에서만 발생합니다.

비슷한 문제가 있습니까?

덕분에 베드로는

답변

1

(XHR 등) 비동기 로직에 대한 테스트, 명시 적으로 this.async()와 비동기 테스트를 약속을 반환하거나 선언해야합니다를 작성 (다음을 제공하는 the Deferred object를 해결). 다음과 같이 끝내야합니다.

myTest: function() { 
    var dfd = this.async(); 

    var table = this.ui.table.DataTable(dataTablesOptions) 
     .on('xhr', function($event, dataTableSettings, jsonResponse, xhr) { 
      //some logic inside 
      dfd.resolve(); 
     }).on('draw', function ($event, dataTableSettings){ 
      //logic 
      dfd.resolve(); 
     }); 
} 

실제로 지연을 해결하는 방법은 테스트 논리에 따라 다릅니다. 예를 들어, 두 개의 이벤트가 발생하면 this.async(5000, 2)을 호출하여 테스트 시간 초과를 5000ms로 설정하고 인턴에게 테스트 완료를 고려하기 전에 지연이 두 번 해결 될 때까지 기다리라고 알릴 수 있습니다. callbackrejectOnError과 같이 Deferred에 첨부 된 몇 가지 편리한 방법도 있으며 사용법을 다소 간소화 할 수 있습니다.