针对jqgrid的Qunit测试用例

PCA*_*PCA 3 jqgrid qunit

很多功能都是用jqgrid编写的.所以我打算用Qunit编写测试用例.

但对于如何使用Qunit为jqgrid编写TC并不熟悉.我在谷歌搜索了一些例子.但我没有找到任何.

如果有人写了一些测试用例,请分享一个样本.

Ole*_*leg 5

我必须从以下几个字开始:我在QUnit表现不佳.然而,因为我看到没有其他人给你写过答案我决定写下我的答案.

最大的问题是如何使用单元测试.我知道很多人试图制定一些"最佳实践规则",并且非常陌生.有很多主题,如"如何组织小组测试"等.我是实用主义者.所以我认为最重要的是制定单元测试的主要目标.如果达到主要目标,那么我已经满意了.因此,我只创建了一些基础测试来演示您可以做什么以及QUnit如何帮助我们.

该演示显示了jqGrid的使用情况QUnit的示例.重要的是要了解一个人必须自己实施每个测试,而QUnit在这里无法帮助我们.所以如果你想验证初始空<table id="grid"></table>是否成功转换为jqGrid,我们必须知道什么是jqGrid以及我们如何测试功能.

例如,在创建jqGrid期间,将在main上创建许多外部div <table>.网格的所有元素都在其中<div class="ui-jqgrid ..." id="gbox_grid" ...>...</div>.所以要验证这一点,我们可以使用这样简单的测试

QUnit.test("gbox exists", function(assert) {
    var $grid = $("#grid");
    assert.equal($grid.closest(".ui-jqgrid").length, 1, "Passed!" );
});
Run Code Online (Sandbox Code Playgroud)

测试验证是否$("#grid").closest(".ui-jqgrid").length等于1.

一个更常见的测试.每个内部jqGrid方法测试是否将grid由于main元素的expando的存在而应用jqGrid <table>.见线的代码的getCell方法,例如,所以可以通过以下测试做同样的事情:

QUnit.test("grid expando exists", function(assert) {
    var $grid = $("#grid");
    assert.notEqual($grid[0].grid, undefined, "Passed!" );
});
Run Code Online (Sandbox Code Playgroud)

因此,我们必须确切地知道您需要测试什么以及如何测试.QUnit可以帮助我们只显示测试结果.

我在演示中包含两个失败的"伪"测试.第一个测试如下.我最近在github上发布了免费的jqGrid 4.8的新版本.您可能知道jqGrid的开发人员Tony在发布jqGrid 4.7后更改了jqGrid的许可协议.所以jqGrid 4.7是MIT许可下可用的"原始jqGrid"的最后一个版本.之后我以"free jqGrid"的名义开始了自己的jqGrid 分支,包括许多功能并修复了许多错误.作为新功能之一,我改变了Navigator Bar的结构.我在维基文章中描述了细节的变化.不久之后说导航栏现在<div>不再<table>使用了.所以测试传递了免费的jqGrid(在我的jqGrid的分支上),但它在jqGrid 4.7上失败了

QUnit.test("the navigator bar is DIV", function(assert) {
    var $grid = $("#grid"), pagerIdSelector = $grid.jqGrid("getGridParam", "pager");
    assert.equal($(pagerIdSelector).find(".navtable")[0].nodeName.toUpperCase(), "DIV", "Passed!" );
});
Run Code Online (Sandbox Code Playgroud)

同时下一次测试在免费的jqGrid上失败了,但传递了原始的jqGrid:

QUnit.test("the navigator bar is TABLE", function(assert) {
    var $grid = $("#grid"), pagerIdSelector = $grid.jqGrid("getGridParam", "pager");
    assert.equal($(pagerIdSelector).find(".navtable")[0].nodeName.toUpperCase(), "TABLE", "Passed!" );
});
Run Code Online (Sandbox Code Playgroud)

测试结果如下:

在此输入图像描述

因此,QUnit帮助我们以更易读的形式显示结果.

我在演示中包含的另一个"伪失败"测试如下.我读了一行的内容,getRowData然后使用assert.deepEqualQUnit的方法将结果与预期的对象进行比较.我包括故意在比较对象中键入错误(我用amount: 400而不是amount: "400.00").测试失败的结果将显示如下

在此输入图像描述

很明显,QUnit的这种功能使得分析测试结果变得容易.

我想再次强调,QUnit仍然无法帮助我们编写测试本身.因此,在编写特定于jqGrid功能的测试时,仍然有很多无聊的工作.

无论如何,我计划将来为我的jqGrid的fork(免费的jqGrid)编写这样的测试.我打算编写一个测试列表,并用它来验证未来jqGrid代码的变化.我希望它有助于使免费的jqGrid对变化更加稳定.我的意思是我想在代码的每个新变化上验证jqGrid的一些功能.所以我希望功能不会被建议的更改打破.这是我对单元测试的期望.