jQuery Datatable - 单元测试逻辑驻留事件回调

jQuery Datatable - unit testing logic residing event callback

我正在针对在视图上呈现的数据table 编写一些单元测试,并且能够成功测试数据table 呈现。这意味着 table 是基于渲染的 ajax 响应。但是当我尝试测试事件回调中编写的一些逻辑(例如 draw、xhr)时,似乎 none 的事件被触发了。

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

应用程序中一切正常,仅在编写单元测试时出现。

有没有人遇到过类似的问题?

谢谢 彼得

在为异步逻辑(如 XHR)编写测试时,确保 return Promise 或显式声明测试与 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();
        });
}

您实际如何解决 Deferred 取决于您的测试逻辑。例如,如果应该发生两个事件,您可以调用 this.async(5000, 2),这会将测试超时设置为 5000 毫秒,并告诉 Intern 在考虑测试完成之前等待 Deferred 被解决两次。 Deferred 还附加了一些方便的方法,比如 callbackrejectOnError,可以稍微简化它的使用。