Статья: Плагин autotest-plugin для VSCode
Тестирование NodeJS проекта отличается от ExtJS
- применяется siesta вместо nodeunit
- добавлена возможность проверки класса
- есть возможность тестирования в браузере
Для тестирования ExtJS применяется проект siesta. Он позволяет производить тестирование в браузере компоненты ExtJS’a
Создание тестов для ExtJS
Для создания тестов применяется тот же механизм что и в nodejs — применяется атрибут @unittest. Но в отличии от nodejs добавлена возможность тестирования всего класса.
/** * Тестовая панель * @class ARM.PanelStatic * @unittest * { * "title": "Hello", * "renderTo": Ext.getBody() * } */ Ext.define('ARM.PanelStatic', { extend: 'Ext.panel.Panel', config: { title: '' }, ...
В примере указывается, как можно протестировать класс.
Внимание!!! Применение атрибута @unittest в комментариях класса обязательно.
Передавать параметры в атрибут @unittest не обязательно, все зависит от реализации класса.
Параметр «renderTo» указывается специально для механизма тестирования.
Тестирование может производиться так же для:
- статических метод
- singleton классов
Принцип работы
/** * Тестовая панель * @class ARM.PanelStatic * @unittest * { * "title": "Hello", * "renderTo": Ext.getBody() * } */ Ext.define('ARM.PanelStatic', { extend: 'Ext.panel.Panel', config: { title: '' }, ...
При открытии файла ExtJS плагин проверит наличия папки siesta в корневом каталоге, если указанная папка будет отсутствовать, то будет автоматически сгенерирован проект для тестирования.
Папка ~/siesta/units является каталогом по умолчанию для хранения файлов для тестирования.
После генерации каталога будет автоматически поднят веб сайт для просмотра сайта в браузере, об этом будет свидетельствовать значок и файл server.js в корневом каталоге.
При нажатии на который будет открыт браузер с тестированием.
Внимание!!! Для работы тестирования требуется установка phantomjs
Пример кода для тестирования:
/** * Утилиты */ StartTest(function (t) { t.name = 'ARM.util.Utilits'; t.description = 'Утилиты'; t.diag('ARM.util.Utilits - Утилиты'); var cmp = null; t.chain( // проверка экземпляра класса function (next) { Ext.require('ARM.util.Utilits', function () { if (!ARM.util.Utilits.singleton) cmp = Ext.create('ARM.util.Utilits', {}); else cmp = ARM.util.Utilits; t.ok(cmp, 'class=[ARM.util.Utilits]'); next(); }); }, // проверка функций function (next) { t.ok(cmp.getSum(2, 1) == 3, 'method=[getSum]'); next(); }, function (next) { cmp.getAsyncRead(function (txt) { t.ok(txt == 'World', "method=[getAsyncRead]"); next(); }); }, function (next) { cmp.getAsyncEmpty(function () { t.ok(true, "method=[getAsyncEmpty]"); next(); }); }, function () { cmp.destroy(); t.done(); } ); });
Правило создания тестов:
- сопоставление теста с файлом происходит при помощи описания.
// пример описания класса t.ok(cmp, 'class=[ARM.util.Utilits]'); // пример описания метода t.ok(cmp.getSum(2, 1) == 3, 'method=[getSum]');
- тестирование для объектов в которых присутствует параметр renderTo происходит после события afterrender
cmp = Ext.create('ARM.PanelStatic', Ext.apply({ "title": "Hello", "renderTo": Ext.getBody() }, { listeners: { afterrender: function (sender) { t.ok(sender, 'class=[ARM.PanelStatic]'); cmp = sender; next(); } } }));
Создание собственных файлов тестирования производится по тем же правила, что и nodejs
Автоматическая настройка siesta
Для корректной настройки тестирования нужно в app.json или package.json указывать:
"namespace": "IServ"
Приоритет отдается файлу app.json. Без указания данного свойства настройку файла preload.js нужно произвести вручную.