2016-11-30 56 views
0

我正在寫一些針對在視圖上呈現的數據表單的單元測試,並且能夠成功測試數據表示呈現。這意味着表是基於ajax響應渲染。但是當我試圖測試一些寫在事件回調函數內部的邏輯時(比如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),這會將測試超時設置爲5000毫秒,並告訴實習生在考慮測試完成之前等待延遲解決兩次。還有一些便利方法附屬於延期,如callbackrejectOnError,可以在某種程度上簡化其使用。