我想测试一个函数,以确保在我应该调用 jquery.dataTable 时。我想用一个 sinon 间谍来做这件事。
我正在使用打字稿,并且我有一个 dataTableManager 可以实际为我创建数据表。我使用 qunit 作为测试框架
我怎么能监视这个?现在我收到以下错误
Attempted to wrap undefined property dataTable as function
这是我的测试
test("DataTableIsCalledWithOptionsWhenIdIsFoundOnThePage", function () {
// arrange
$("#qunit_fixture").append("<table id='#testTable'></table>");
var createDateTableFunctionSpy = sinon.spy($("#testTable"), "dataTable");
var customOptions = {
"iDisplayLength": 200,
"aoColumns": [
{ sWidth: '3%' },
{ sWidth: '47%' },
{ sWidth: '12%' },
{ sWidth: '17%' },
{ sWidth: '14%' },
{ sWidth: '7%' }],
"aoColumnDefs": [
{ 'bSortable': false, 'aTargets': [0, 5] }
]
};
var dataTableManager = new DataTableManager($, "#testTable", customOptions);
// act
dataTableManager.createDataTable();
// assert
ok(createDateTableFunctionSpy.called);
});
这是我的构造函数
constructor(jQuery: JQueryStatic, tableId: string, customOptions: DataTables.Options){
var self = this;
self.jQuery = jQuery;
self.options = {};
self.jQuery.extend(self.options, DataTableManager.defaultOptions, customOptions);
self.tableId = tableId;
}
这是我要测试的创建功能
createDataTable = function () {
// if it doesn't exist on the dom return
var actualTable = this.jQuery(this.tableId);
if (actualTable.length == 0) {
return;
}
// create the data table with options
var newDataTable = actualTable.dataTable(this.options);
};
关于如何监视 actualTable.dataTable(this.options) 的任何想法;打电话会很棒,谢谢!