2015-02-26 4 views
3

Множество funcationality было написано с использованием jqgrid. Поэтому я планировал написать тестовые примеры с помощью Qunit.Qunit Test Cases for jqgrid

Но не знакомы с тем, как написать TC для jqgrid с помощью Qunit. Я искал некоторые примеры в google. но я их не найду.

Если кто-то написал несколько тестовых коробок, просьба поделиться образцом.

ответ

4

Я должен начать с следующих слов: Я нехорошо в QUnit. Тем не менее, потому что я вижу, что никто другой не написал вам ответ, я решил написать свой ответ.

Основная проблема Как использовать модульные тесты. Я знаю много людей, которые пытаются установить некоторые «правила лучшей практики» и держать там очень странно. Существует множество тем, таких как «как организовать тесты в группах» и т. Д. Я прагматик. Поэтому я считаю, что самое главное - сформулировать главная цель модульных тестов. Если главная цель достигнута, то я уже доволен. Поэтому я создал только некоторые базовые тесты, чтобы продемонстрировать, что вы можете сделать и как QUnit может нам помочь.

The demo показывает пример использования QUnit для jqGrid. Важно понимать, что каждый должен выполнить каждый тест самостоятельно, и QUnit не может помочь нам здесь. Итак, если вы хотите проверить, что начальный пуст <table id="grid"></table> был успешно преобразован в jqGrid , мы должны знать, что такое jqGrid и как мы можем протестировать функциональность.

Например, во время создания jqGrid многие внешние 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!"); 
}); 

Тест проверки ли $("#grid").closest(".ui-jqgrid").length равно 1.

Еще один общий тест. Каждый внутренний метод jqGrid проверяет, будет ли он применяться к jqGrid путем существования grid expando элемента DOM основного <table>. См. Пример the line кода getCell. Таким образом, можно сделать то же самое по следующему тесту:

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

Итак, мы должны точно знать, что вам нужно для тестирования и тестирования. QUnit может помочь нам только отобразить результаты тестов.

Я включил в свое демо два теста «псевдо», которые потерпели неудачу. Первый тест следующий. Недавно я опубликовал github новую версию бесплатного jqGrid 4.8. Как вы, вероятно, знаете, что Tony, разработчик jqGrid, изменил лицензионное соглашение jqGrid после публикации jqGrid 4.7. Таким образом, jqGrid 4.7 - это последняя версия «оригинального jqGrid», доступная под лицензиями MIT. После этого я начал свою собственную вилку jqGrid под именем «free jqGrid», включил множество функций и исправил множество ошибок. В качестве одной из новых функций я изменил структуру Navigator Bar. Я описываю изменения в деталях в the wiki article. Вкратце скажем, что панель навигации теперь <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!"); 
}); 

В то же время следующий тест не удалось на свободном 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!"); 
}); 

Результаты тестов выглядит следующим образом:

enter image description here

Поэтому QUnit помогает нам просто отображать результаты в более читаемой форме.

Еще один тест с «псевдо-неудачей», который я включил в демо, - это следующее. Я прочитал содержимое одной строки относительно getRowData, а затем сравните результаты с ожидаемым объектом с помощью метода assert.deepEqual QUnit. Я включил сознательно ошибка ввода в сравниваемом объекте (я использовал amount: 400 вместо amount: "400.00"). Результаты неудачного теста будут показаны ниже

enter image description here

Понятно, что такая функциональность QUnit делает анализ результатов тестирования легко.

Я хочу подчеркнуть еще раз, что QUnit до сих пор не помогает нам в написании самих тестов. Таким образом, у вас еще много скучной работы при написании тестов, которые являются специфическими для функциональности jqGrid.

В любом случае, я планирую в будущем написать такие тесты для своей вилки jqGrid (бесплатно jqGrid). Я планирую написать список тестов и использовать его для проверки изменений кода jqGrid в будущем. Я надеюсь, что это поможет сделать бесплатный jqGrid более стабильным для изменений. Я хочу сказать, что я хочу проверить некоторые функции jqGrid на каждое новое изменение кода. Поэтому я хочу, чтобы предлагаемые изменения не были нарушены. Это то, что я ожидаю от модульных тестов.