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 还附加了一些方便的方法,比如 callback
和 rejectOnError
,可以稍微简化它的使用。
我正在针对在视图上呈现的数据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 还附加了一些方便的方法,比如 callback
和 rejectOnError
,可以稍微简化它的使用。