Я должен начать с следующих слов: Я нехорошо в 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!");
});
Результаты тестов выглядит следующим образом:
Поэтому QUnit помогает нам просто отображать результаты в более читаемой форме.
Еще один тест с «псевдо-неудачей», который я включил в демо, - это следующее. Я прочитал содержимое одной строки относительно getRowData
, а затем сравните результаты с ожидаемым объектом с помощью метода assert.deepEqual
QUnit. Я включил сознательно ошибка ввода в сравниваемом объекте (я использовал amount: 400
вместо amount: "400.00"
). Результаты неудачного теста будут показаны ниже
Понятно, что такая функциональность QUnit делает анализ результатов тестирования легко.
Я хочу подчеркнуть еще раз, что QUnit до сих пор не помогает нам в написании самих тестов. Таким образом, у вас еще много скучной работы при написании тестов, которые являются специфическими для функциональности jqGrid.
В любом случае, я планирую в будущем написать такие тесты для своей вилки jqGrid (бесплатно jqGrid). Я планирую написать список тестов и использовать его для проверки изменений кода jqGrid в будущем. Я надеюсь, что это поможет сделать бесплатный jqGrid более стабильным для изменений. Я хочу сказать, что я хочу проверить некоторые функции jqGrid на каждое новое изменение кода. Поэтому я хочу, чтобы предлагаемые изменения не были нарушены. Это то, что я ожидаю от модульных тестов.